我创建了一个名为“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
答案 0 :(得分:1)
你在#import行中放了no_namespace - 所以你的对象不在wsutils命名空间中,它在全局命名空间中。从#import行中删除no_namespace,或从对象创建行中删除wsutils ::。
答案 1 :(得分:1)
您的VB.NET代码中使用的命名空间名称对COM客户端不可见。只需省略wsutils ::前缀即可。每当您怀疑#imported名称是什么样的时候,请用编辑器打开自动生成的.tlh和.tli文件。