2012-02-28 8 views
1

は私が.NETで使用するために、MicrosoftのDIA SDKをインポートしようとした:ことを除いて、ほとんどの部分は正常に動作するようですなぜ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

を何をしたいですか取得しますそれ。 –

+0

@HansPassant:ああああ....それ以外の方法を教える方法はありますか? – Mehrdad

答えて

0

ハードロードを試してみたいのかどうかは分かりませんが、IDLにアクセスできる場合は、CodeprojectのTaskSchedulerプロジェクトで行われたのと同様の作業を使用してインターフェイスを模倣することができます。 (はい、私はそれが古いと知っています)。

TaskSchedulerInterop.cs

http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=2407

1

は基本的に私がやった私は、引数として、すべて「未使用」列挙型を取る(DIA SDK\idl\dia2.idl中)IDiaDataSource定義に余分な「MIDLハック」メソッドを追加しました。メソッドがインターフェイス定義の終わりにある限り(もちろん実際には呼び出さない)、残りのvtableメソッドは正常に動作します。また、ファイルの先頭に他のインターフェイスの前方宣言を追加する必要があります。

1

midl.exeは、idl記述の 'library'セクションから生成されたタイプライブラリのみのアイテム(およびそれらの依存関係)を選択します。

「ライブラリ」セクションに逃したインターフェースを追加し、あなたがタイプライブラリビルダーは、あなたがのための使用を持っていないと思っので、それは、タイプライブラリに他の場所で使用されていないあなたは

//... 
library Dia2Lib 
{ 
//... 
interface IDiaEnumFrameData; // << insert it 
//... 
}