题
在 C++ 程序中,我尝试 #import .NET 进程外服务器的 TLB。
我收到如下错误:
z:\server.tlh(111) :错误C2146:语法错误:丢失的 ';'在标识符“ getType”之前
z:\server.tlh(111) :错误C2501:'_TypePtr':缺少存储类或类型说明符
z:\server.tli(74) :错误C2143:语法错误:丢失的 ';'在'tag :: id'之前
z:\server.tli(74) :错误C2433:'_TypePtr':数据声明中不允许使用“inline”
z:\server.tli(74) :错误C2501:'_TypePtr':缺少存储类或类型说明符
z:\server.tli(74) :致命错误 C1004:发现意外的文件结尾
TLH 看起来像:
_bstr_t GetToString();
VARIANT_BOOL Equals (const _variant_t & obj);
long GetHashCode();
_TypePtr GetType();
long Open();
我对拥有基本对象 .NET 对象方法(如 GetType()、Equals() 等)并不真正感兴趣。但 GetType() 似乎引起了问题。
一些谷歌研究表明我可以 #import mscorlib.tlb
(或将其放入路径中),但我也无法编译它。
有小费吗?
解决方案 3
将 no_namespace 和 raw_interfaces_only 添加到我的 #import 中:
#import "server.tlb" no_namespace named_guids
另外使用 TLBEXP.EXE 而不是 REGASM.EXE 似乎可以解决此问题。
其他提示
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.
更重要的是,当VS符合COM源为TLB时,将会有这样的提示:// #import“ c: windows microsoft.net framework v2.0.50727 mscorlib.tlb” shoud shoud shoud thit shoud添加到#inport youown.tlb之前,basice属性,例如_ type,_objref,_objref,_objref将在您中添加您原型类型的项目
我想,它会解决你的问题。
但更大的问题是:完成所有操作后,当您在程序中调用 Ptr 时,会出现一些运行时错误
任何人都可以帮忙吗?
另外,请确保您的 C# 类没有此属性:
[ClassInterface(ClassInterfaceType.AutoDual)] <-- 似乎会导致 C++ 中的 _TypePtr 错误