1
0
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:
Jelmer Vernooij 2004-11-01 20:00:02 +00:00 committed by Gerald (Jerry) Carter
parent 93377e6090
commit 05dd840b6f
2 changed files with 35 additions and 4 deletions

View File

@ -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;
}

View File

@ -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);
}
}