#import of .NET out-of-proc服务器的问题

时间:2008-08-15 20:40:12

标签: c# c++ com interop

在C ++程序中,我正在尝试#import .NET of-of-proc服务器的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(或把它放在路径中),但我也无法编译。

任何提示?

5 个答案:

答案 0 :(得分:3)

#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" was the solution for me.

答案 1 :(得分:1)

您似乎需要使用

[ClassInterface(ClassInterfaceType.None)]

以下是关于类似问题的another discussion

答案 2 :(得分:1)

更重要的是, 当vs将com源编译成tlb时 在它将有一个这样的提示: // #import“C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorlib.tlb” 你应该在#inport youOwn.tlb之前将它添加到StdAfx.h中 basice属性就像 _Type,_ObjRef将在项目中添加原型类型

我认为,它会解决你的问题。

但更大的问题是: 完成所有操作后,在程序中调用Ptr时会出现一些运行时错误

任何人都可以提供帮助吗?

答案 3 :(得分:1)

将no_namespace和raw_interfaces_only添加到我的#import:

#import "server.tlb" no_namespace named_guids

同样使用TLBEXP.EXE而不是REGASM.EXE似乎可以帮助解决这个问题。

答案 4 :(得分:0)

另外,请确保您的C#类没有此属性:

[ClassInterface(ClassInterfaceType.AutoDual)]< - 似乎使用_TypePtr在C ++中导致错误