2010-01-05 46 views
1

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

然后我试图在一个非托管的C++项目中实现它。

我进口它:#进口 “.. \ WSdll \ WSdll \ BIN \调试\ WSdll.tlb” \ raw_interfaces_only,\ named_guids,\ no_namespace

然后试图创建一个实例: CComPtr < IWSconnection> pIWSconnection; pIWSconnection.CoCreateInstance(__uuidof(wsutils :: WSconnection));

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

哪些其他措施做我必须做的就是该dll在这里工作?

TIA

+0

您拼写为“原生”错误 – 2010-01-05 20:41:44

回答

1

你把no_namespace在#import语句 - 所以你的对象是不是在wsutils命名空间,它是在全局命名空间。从#import行删除no_namespace,或从对象创建行删除wsutils ::。

+0

非常感谢!这工作。现在,我还有另一个问题: 我使用以下命令创建对象: CComPtr pIWSconnection; pIWSconnection.CoCreateInstance(__uuidof(IWSconnection)); 然后,当我试图调用一个方法: pIWSconnection.connect(...) 我得到一个错误: pIWSconnection未声明的标识符 为什么会用“的CoCreateInstance的工作,而不是与“连接”? – user228058 2010-01-06 16:15:06

+0

首先,你应该pIWSconnection->连接。顺便说一下,为什么混合ATL智能指针(CComPtr)和Native COM? – 2010-02-11 17:22:35

1

您的VB.NET代码中使用的名称空间名称对COM客户端不可见。只需省略wsutils ::前缀即可。无论何时您怀疑#import的名称是什么样子,请使用您的编辑器打开自动生成的.tlh和.tli文件。

+0

默认情况下,#import将所有接口和类放入与typelib名称(内部名称,不是文件名)匹配的名称空间中。其中,默认情况下,它与生成的.NET typelib的项目名称相匹配。默认情况下,它是.NET项目中所有类的默认命名空间。 :) 无论如何,错误是关于名称空间不匹配。 – 2010-01-05 21:56:11

相关问题