C# 使用C++;
我有一个为COM互操作注册的.NET库,我从VB6代码中成功地使用了它(因此,它是正确注册的,这不是问题所在) <> >我正在尝试通过C++代码(MFC ActiveX控件)使用这个相同的库,甚至我不能实例化对象(是的,它有一个无参数的构造函数)。 假设名称空间是Foo,类的名称是Bar。我将如何实例化这样的对象?我正在尝试这个: 在.h文件中:C# 使用C++;,c#,c++,.net,com,interop,C#,C++,.net,Com,Interop,我有一个为COM互操作注册的.NET库,我从VB6代码中成功地使用了它(因此,它是正确注册的,这不是问题所在) >我正在尝试通过C++代码(MFC ActiveX控件)使用这个相同的库,甚至我不能实例化对象(是的,它有一个无参数的构造函数)。 假设名称空间是Foo,类的名称是Bar。我将如何实例化这样的对象?我正在尝试这个: 在.h文件中: Foo::Bar *obj; 在.cpp文件上,在ActiveX控件的构造函数上: obj = new Foo::Bar(); 我得到了以下错误:
Foo::Bar *obj;
在.cpp文件上,在ActiveX控件的构造函数上:
obj = new Foo::Bar();
我得到了以下错误:
- «不允许使用不完整的类型“»
- «错误C2027:使用未定义的类型“Foo::Bar”»
CComObject<Foo::Bar>* obj;
HRESULT hr = CComObject<Foo::Bar>::CreateInstance(&obj);
//check hr
<> P>和HANS建议在他评论中,你想使用导入指令来导入类型库。在C++中, < P>,首先你应该初始化COM,然后通过UUID获取COM对象,你可以使用这个COM对象的功能,在完成之后,不初始化COM。所以代码将是这样的:
CoInitialize(NULL);
IMyClassPtr myClass = IMyClassPtr(_uuid(myClass));
if (myClass != NULL)
{
myClass->DoSomething();
}
CoUnitialize();
你不接近编写正确的C++代码。从一个更接近的地方开始,一本书当然也不会受到伤害。很明显,我使用了“导入”指令。我省略了它,因为我认为它对每个人都是显而易见的。我熟悉C++,不熟悉Windows或COM互操作。非常感谢,埃里克!我已经成功地提出了第二个建议。ion(使用接口和实现它的类型)。@amgcgoncalves很高兴听到这个消息!祝你在使用COM时好运。如果你不习惯它,可能会有点难以处理。
CoInitialize(NULL);
IMyClassPtr myClass = IMyClassPtr(_uuid(myClass));
if (myClass != NULL)
{
myClass->DoSomething();
}
CoUnitialize();