我创建了一个在 IDL 中定义的 COM 库,它有一个名为 IFoo 的“入口点”:
[
object,
uuid(789b4d46-4028-4196-8412-4c5c8ef86caa),
nonextensible,
pointer_default(unique)
]
interface IFoo: IUnknown
{
HRESULT HelloWorld();
};
我已经在我的 C# 库中实现了这个,如下所示:
[ComVisible(true)]
[Guid("45b50f1e-d551-4be0-b52a-7ec075840114")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IFoo))]
class Foo: IFoo
{
public void HelloWorld()
{
Console.WriteLine("Hello world");
}
}
我编译了这个,并注册了它:
regasm.exe foo.dll
到目前为止,一切看起来都很好。
现在,如何在我的 C++ 程序中创建它的实例?我认为正确的函数是 ::CoCreateInstance:
::CoInitializeEx(NULL, COINIT_MULTITHREADED);
IUnknown *pUnk = 0;
HRESULT hr = ::CoCreateInstance(???,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IFoo),
(void**)&pUnk);
这是创建此类实例的正确方法吗?如果是这样,“???”中的内容是什么 以上?
我认为类的 UUID(上面的“45b50f1e-d551-4be0-b52a-7ec075840114”)应该放在那里,但我不知道如何从这个 GUID 字符串手动创建 IID。