mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r3440: Add support for "coclass" to the pidl parser - the idl keyword that
describes a COM class. A coclass is the implementation of one or more interfaces. It has a UUID referred to as it's CLSID (Class ID). Also adding an example coclass called "CoffeeMachine". You can give it a string (or a cup, whatever you like ;-) and it will fill it with "COFFEE" (kind of the like the echo pipe is for regular RPC). CoffeeMachine's Windows implementation already works, a torture test for Samba will follow soon.
This commit is contained in:
parent
93377e6090
commit
05dd840b6f
@ -16,9 +16,22 @@
|
||||
%%
|
||||
idl:
|
||||
#empty { {} }
|
||||
| idl interface {
|
||||
push(@{$_[1]}, $_[2]); $_[1]
|
||||
}
|
||||
| idl interface { push(@{$_[1]}, $_[2]); $_[1] }
|
||||
| idl coclass { push(@{$_[1]}, $_[2]); $_[1] }
|
||||
;
|
||||
|
||||
coclass: property_list 'coclass' identifier '{' interfaces '}' optional_semicolon
|
||||
{$_[3] => {
|
||||
"TYPE" => "COCLASS",
|
||||
"PROPERTIES" => $_[1],
|
||||
"NAME" => $_[3],
|
||||
"DATA" => $_[5],
|
||||
}}
|
||||
;
|
||||
|
||||
interfaces:
|
||||
#empty { {} }
|
||||
| interfaces interface { push(@{$_[1]}, $_[2]); $_[1] }
|
||||
;
|
||||
|
||||
interface: property_list 'interface' identifier base_interface '{' definitions '}' optional_semicolon
|
||||
@ -291,7 +304,7 @@ again:
|
||||
if (s/^([\w_]+)//) {
|
||||
$parser->YYData->{LAST_TOKEN} = $1;
|
||||
if ($1 =~
|
||||
/^(interface|const|typedef|union
|
||||
/^(coclass|interface|const|typedef|union
|
||||
|struct|enum|void|case|default)$/x) {
|
||||
return $1;
|
||||
}
|
||||
|
@ -486,3 +486,21 @@ object,
|
||||
WERROR MarshalInterface();
|
||||
WERROR UnMarshalInterface();
|
||||
}
|
||||
|
||||
|
||||
[
|
||||
uuid(DB7C21F8-FE33-4C11-AEA5-CEB56F076FBB),
|
||||
helpstring("CoffeeMachine Class")
|
||||
] coclass CoffeeMachine
|
||||
{
|
||||
[
|
||||
uuid(DA23F6DB-6F45-466C-9EED-0B65286F2D78),
|
||||
helpstring("ICoffeeMachine Interface"),
|
||||
pointer_default(unique)
|
||||
]
|
||||
|
||||
interface ICoffeeMachine : IUnknown
|
||||
{
|
||||
[helpstring("method MakeCoffee")] HRESULT MakeCoffee(BSTR *flavor);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user