34

私は定期的に同様の状況に遭遇しています:いくつかの外部(非オープン、非文書化)データ形式にアクセスできるようにするために使用および呼び出す必要のあるCOM .DLL(IDLファイルなし)がたくさんあります。

MicrosoftのVisualStudioプラットフォームには、このようなCOM DLLをインポートしてプロジェクトで使用するための非常に優れた機能があります(Visual C ++の#importディレクティブ、またはVisual Basic .NETのダイアログを使用してそれらを選択して追加する)-これは、ベンダーが推奨する使用方法です。

マイクロソフト以外の開発プラットフォームでこれらのDLLを使用する方法を見つけることに興味があります。つまり、MinGWまたはCygwinでコンパイルされたC ++プロジェクトでこれらのCOMクラスを使用するか、LinuxへのWineのGCCポートを使用します(Linuxでネイティブに実行されるバイナリにWin32をターゲットとするC ++をコンパイルします)。

このドライバーを使用した場合の成功は限られていますが、100%の状況では成功しません(一部のメソッドによって返されたCOMオブジェクトを使用できません)。

誰かが同様の状況で成功しましたか?

4

3 に答える 3

25

自分自身に答えましたが、Microsoft 以外のコンパイラでの OLE/COM 呼び出しに最適なライブラリを見つけることができました: disphelper

(寛大なBSD ライセンスの下でsourceforge.netから入手できます)。

C と C++ の両方で動作します (したがって、C バインディングを持つ他の言語でも同様です)。printf/scanf に似たフォーマット文字列構文を使用します。(型ライブラリで指定されているものと正確に一致する引数を必要とするXYDispDriver
とは 異なり、フォーマット文字列で指定する限り、必要なものを何でも渡します)。

Linux で WineGCC を使用してコンパイルできるように (Win32 コードからネイティブの Linux elf を生成するため)、"by ref" 呼び出しを自動的に処理するように少し変更しました (標準の disthelper では、プログラマーが独自の VARIANT をセットアップする必要があります)。 .

パッチを適用したバージョンとパッチは、github のフォークとして入手できます。

そして、ここに私のパッチがあります:

于 2008-10-31T20:40:24.887 に答える
5

Visual Studio および Windows SDK に同梱されている Ole/Com Object Viewer の問題は、.DLL から破損した .IDL が生成され、MIDL によって .H/.CPP ペアにさらにコンパイルできないことです。

Wine 独自の OleViewer の再実装は現在不安定であり、これらのライブラリを使用しようとするとクラッシュします。

于 2008-09-17T16:51:48.007 に答える
0

無料のツールであるOle/ComObjectViewerを使用してヘッダーファイルを作成できるはずです。

于 2008-09-17T15:39:54.963 に答える