2008-08-15 97 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.