From 9566e8af25f87ad034a984db9d847942e454a180 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 25 Jul 2022 10:08:28 -0700 Subject: Allow `class` to implement COM interface, [DLLExport] (#2338) * Allow `class` to implement COM interface, [DLLExport] * Fix [COM] usage in tests and examples with UUIDs. Co-authored-by: Yong He --- tests/cpu-program/class-com.slang | 40 ++++++++++++++++++++++++++++++ tests/cpu-program/class-com.slang.expected | 6 +++++ 2 files changed, 46 insertions(+) create mode 100644 tests/cpu-program/class-com.slang create mode 100644 tests/cpu-program/class-com.slang.expected (limited to 'tests') diff --git a/tests/cpu-program/class-com.slang b/tests/cpu-program/class-com.slang new file mode 100644 index 000000000..c8dfc7b14 --- /dev/null +++ b/tests/cpu-program/class-com.slang @@ -0,0 +1,40 @@ +//TEST:EXECUTABLE: +__target_intrinsic(cpp, "printf(\"%s\\n\", ($0).getBuffer())") +void writeln(String text); + +[COM("BE18F5D2-4522-4AB0-A6EE-1D157FA2B083")] +interface IFoo +{ + int method(); +}; + +class MyClass : IFoo +{ + int intMember; + __init() + { + intMember = 0; + } + int method() + { + writeln("method"); + return intMember; + } +}; + +[DllExport] +IFoo createFoo() +{ + IFoo result = new MyClass(); + return result; +} + +// Now we import the `createFoo` function from current module. +[DllImport("", "createFoo")] +IFoo createFooImported(); + +public __extern_cpp int main() +{ + var obj = createFoo(); + return obj.method(); +} \ No newline at end of file diff --git a/tests/cpu-program/class-com.slang.expected b/tests/cpu-program/class-com.slang.expected new file mode 100644 index 000000000..70274e060 --- /dev/null +++ b/tests/cpu-program/class-com.slang.expected @@ -0,0 +1,6 @@ +result code = 0 +standard error = { +} +standard output = { +method +} -- cgit v1.2.3