Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C++;_C#_C++_.net_Com_Interop - Fatal编程技术网

C# 使用C++;

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(); 我得到了以下错误:

我有一个为COM互操作注册的.NET库,我从VB6代码中成功地使用了它(因此,它是正确注册的,这不是问题所在)

<> >我正在尝试通过C++代码(MFC ActiveX控件)使用这个相同的库,甚至我不能实例化对象(是的,它有一个无参数的构造函数)。 假设名称空间是Foo,类的名称是Bar。我将如何实例化这样的对象?我正在尝试这个:

在.h文件中:

Foo::Bar *obj;
在.cpp文件上,在ActiveX控件的构造函数上:

obj = new Foo::Bar();
我得到了以下错误:

  • «不允许使用不完整的类型“»
  • «错误C2027:使用未定义的类型“Foo::Bar”»
基本上,我的问题是:如何从C++代码中使用.NET COM互操作对象?
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();