Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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/8/svg/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++_Vb.net_Com_Dll_Interop - Fatal编程技术网

C++ 在非托管c++;项目

C++ 在非托管c++;项目,c++,vb.net,com,dll,interop,C++,Vb.net,Com,Dll,Interop,我创建了一个名为“WSdll.dll”的vb.net dll。 我编译了它,创建了一个类型库(tlb),并全局注册了它(gacutil)。。 它包括一个名为wsutils.vb的文件,其中包括一个名为“wsutils”的命名空间。 在名称空间中,有一个名为“IWSconnection”的接口(带有属性)和一个名为“WSconnection”的类。 接口和类是公共的,所有方法和属性也是公共的 我尝试在非托管C++项目中实现它。 我导入了它: #导入“.\WSdll\WSdll\bin\Debug\

我创建了一个名为“WSdll.dll”的vb.net dll。 我编译了它,创建了一个类型库(tlb),并全局注册了它(gacutil)。。 它包括一个名为wsutils.vb的文件,其中包括一个名为“wsutils”的命名空间。 在名称空间中,有一个名为“IWSconnection”的接口(带有属性)和一个名为“WSconnection”的类。 接口和类是公共的,所有方法和属性也是公共的

我尝试在非托管C++项目中实现它。 我导入了它: #导入“.\WSdll\WSdll\bin\Debug\WSdll.tlb”\ 仅原始接口\ 命名为"guids",\ 无名称空间

然后尝试创建一个实例: CComPtrpIWSconnection; CoCreateInstance(uuuidof(wsutils::WSconnection))

我收到2个错误a)wsutils不是类或命名空间名称b)wsconnection未声明的标识符

要使dll在此处工作,我还需要执行哪些其他步骤


TIA

您在#导入行中没有放置任何_名称空间-因此您的对象不在wsutils名称空间中,而是在全局名称空间中。从导入行删除no#u名称空间,或从对象创建行删除wsutils::名称空间。

VB.NET代码中使用的名称空间名称对COM客户端不可见。只需省略wsutils::前缀。如果您对导入的名称有疑问,请使用编辑器打开自动生成的.tlh和.tli文件。

默认情况下,#导入将所有接口和类放入与typelib名称(内部名称,而不是文件名)匹配的命名空间中。默认情况下,它与生成的.NET TypeLib的项目名称匹配。默认情况下,它是.NET项目中所有类的默认命名空间。:)无论如何,这个错误是关于名称空间不匹配的。非常感谢!成功了。现在,我有另一个问题:我使用:CComPtrpIWSconnection;CoCreateInstance(u_uidof(IWSconnection));然后,当我试图调用一个方法:pIWSconnection.connect(…)时,我得到一个错误:pIWSconnection未声明的标识符为什么它与“CoCreateInstance”一起工作,而与“connect”不一起工作?首先,您应该pIWSconnection->connect。顺便问一下,为什么要将ATL智能指针(CComPtr)与本机COM混合使用?