summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/pidl/idl.yp21
-rw-r--r--source4/librpc/idl/dcom.idl18
2 files changed, 35 insertions, 4 deletions
diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp
index a98dbd9104..f512985ea0 100644
--- a/source4/build/pidl/idl.yp
+++ b/source4/build/pidl/idl.yp
@@ -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;
}
diff --git a/source4/librpc/idl/dcom.idl b/source4/librpc/idl/dcom.idl
index 1d32d723c6..eb470b6908 100644
--- a/source4/librpc/idl/dcom.idl
+++ b/source4/librpc/idl/dcom.idl
@@ -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);
+ }
+}