2009-06-26 10 views
3

VC++の例を提供するライブラリをテストしようとしています。しかし、私はすべてのプロジェクトにgcc/g ++を使用しています。GCC/G ++のVC++ #import指令

まあ、VC++の例では、ライブラリにアクセスする方法は、それがライブラリのDLLの場所を渡し、の#importディレクティブを使用している、それは名前空間 LIBRARYNAMEを使用してを行い、その後、それを作成することができますいくつかの未定義の型(私はそれがDLLで定義されていると思います)と__uuidofで新しいインスタンスを作成します。それ以降、ライブラリ関数の1つを呼び出すには、createdObj-> foo()のようになります。

まあ... g ++の#importはVC++のインポートと違います(here参照)ので、この例は私にとっては役に立ちません。

これは、g ++でコンパイルする方法はありますか?または、ライブラリーの開発者が私に試してみることができる静的ライブラリーを提供するまではありますか?

答えて

2

cygwinを使用している場合、このページ:http://www.cygwin.com/cygwin-ug-net/dll.htmlが必要なすべてのヘルプを提供します。

mingwを使用している場合は、同じことを実行できますが、おそらくgrepとsedはありません。したがって、.defファイルを取得するためにフィルタリングを行う他の方法を使用する必要があります。

+0

ありがとうございます。残念ながら、それは彼らがそのウェブサイトに与えるコマンドが私のために「記号なし」を返すので、うまくいきません。 VC++がどのようにシンボルを抽出できるのか不思議に思っていますか?おそらく、それはライブラリの関数がcdecl関数ではなくstdcall関数であるからです。 – beepboopbopbop

+0

リンクの+1 thx ... –

1

#importをVC++で使用していた場合、DLLは通常のDLLではなく、COM DLLです。

gccにはCOMサポートがないので、ライブラリ作成者がCOM以外のバージョンを書くのを待つだけでよいでしょう。

+0

COMはよく文書化されています。あなたはそれ以上のCコンパイラを使用して相互運用することができます – jalf

+1

OK、私は不可能だと言っているわけではありませんが、VC++のvtableのレイアウトに合わせて手動でインターフェイスを作成する必要があります。 このプロジェクトでは、非COMライブラリを見つけたり、VC++ Expressに切り替えるほうがずっと良いでしょう。 –

2

おそらく、OLEViewerと「タイプ情報の表示」を使用してIDLの基本を抽出するのに役立つ可能性があります。または、VC++で生成された.tlhファイルと.tliファイルを使用してG ++プロジェクトにインポートすることもできます。

私はこの回答が遅すぎると思いますが、今私はこの問題に直面しています。あなたが時間通りに解決策を見つけたことを願っています。

よろしくお願いいたします。