在非托管c ++项目中使用vb.net dll

时间:2010-01-05 20:33:36

标签: c++ vb.net com dll interop

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

然后我尝试在非托管的c ++项目中实现它。

我导入了它:     #import“.. \ WSdll \ WSdll \ bin \ Debug \ WSdll.tlb”\  raw_interfaces_only,\    named_guids,\    no_namespace

然后尝试创建一个实例:     但是CComPtr< IWSconnection> pIWSconnection;  pIWSconnection.CoCreateInstance(__ uuidof(wsutils :: WSconnection));

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

我需要采取哪些其他步骤才能让dll在这里工作?

TIA

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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