2012-02-28 34 views
1

我試圖導入微軟的SDK DIA爲使用.NET:爲什麼TlbImp不能將DIA的COM接口正確導入到.NET中?

call "%VS90COMNTOOLS%\vsvars32.bat" 
midl /I "%VSINSTALLDIR%\DIA SDK\include" "%VSINSTALLDIR%\DIA SDK\idl\dia2.idl" /tlb dia2.tlb 
tlbimp dia2.tlb 

這似乎在大多數情況下正常工作,不同之處在於,由於某種原因,它不包括一些接口(例如, IDiaEnumFrameData),而其餘的包括其餘的都很好。

(該接口既不存在於.dll文件,也不在.TLB文件 - 即使它是存在於C和頭文件)。

是什麼原因造成的?

+0

所以類型庫建設者認爲你有沒有用它,不使用其他任何地方類型庫是什麼它。 – 2012-02-28 03:19:04

+0

@HansPassant:哦哇....有什麼方法可以告訴它嗎? – Mehrdad 2012-02-28 03:47:27

回答

1

基本上我所做的就是我加在IDiaDataSource定義一個額外的「黑客MIDL」方法(在DIA SDK\idl\dia2.idl),其採用所有的「未使用」枚舉類型作爲參數。只要該方法在接口定義的末尾(當然,你實際上並沒有調用它),其餘的vtable方法仍然可以正常工作。您還需要在文件的開頭爲其他接口添加前向聲明。

1

midl.exe從idl描述的'庫'部分中僅向生成的類型庫推送僅項目(及其依賴項)。

錯過接口添加到「庫」部分,你會得到你想要

//... 
library Dia2Lib 
{ 
//... 
interface IDiaEnumFrameData; // << insert it 
//... 
} 
相關問題