2008-08-15 71 views
3

在C++程序中,我试图#导入.NET进程外的TLB服务器。.NET进程外#服务器的问题

我得到这样的错误:

Z:\ server.tlh(111):错误C2146:语法错误:缺少 ';'标识符 '之前的GetType'

Z:\ server.tlh(111):错误C2501: '_TypePtr':缺少存储类或类型说明

Z:\ server.tli(74):错误C2143:语法错误:缺少';'前 '标记:: ID'

Z:\ server.tli(74):错误C2433: '_TypePtr':对数据声明不允许 '内联'

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(); 

我并不是真的对像GetType(),Equals()等基对象的.NET对象方法感兴趣,但GetType()似乎是造成问题。

一些谷歌的研究表明我可以#import mscorlib.tlb(或把它放在路径中),但我无法得到的编译。

任何提示?

回答

1

新增no_namespace和raw_interfaces_only我的#进口:

#import "server.tlb" no_namespace named_guids 

而且使用TLBEXP.EXE代替REGASM.EXE似乎帮助这个问题。

+0

TLBEXP没有帮助我,raw_interfaces_only没有。为什么代码示例包含named_guids而不是raw_interfaces_only? – 2010-11-08 11:47:52

0

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

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

+0

任何想法为什么会发生这种情况? – 2010-11-08 11:45:33

1

更ofenly, 时vs compcomp com的来源到一个tlb 它会有这样的提示: // #import“C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorlib.tlb” 你应该把这个添加到StdAfx .h之前#inport youOwn.tlb 像 这样的basice属性_Type,_ObjRef会添加编辑在你项目为原型

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

,但更大的问题是:一切都很 完成后,会有一些运行时错误,当你调用一个PTR在你的程序

任何人都可以帮忙吗?

1

看来你需要使用

[ClassInterface(ClassInterfaceType.None)] 

这里是another discussion对类似的问题。

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