1

まず、私の C++ に関する知識は限られており、pinvoke も初めてです。

非常に古いコードを含むライブラリがあり、C# で使用したいのですが、もちろん古いため、管理されていない C++ です。ライブラリ用の C# dll ラッパーを作成しようとしています。したがって、将来、コードを使用したい人は誰でも dll を使用できます。ただし、関数をエクスポートして pinvoke を実行する方法を見つけることができます。ダンプビンを試しましたが、何も表示されませんでした。それとも、コードから関数を取得する必要がありますか? 下はゴミ箱です。

ここに画像の説明を入力

4

3 に答える 3

2

何をする必要があるかは、ライブラリの種類によって異なります。

  1. 静的ライブラリの場合は、DLL をビルドし、.lib ファイルをその DLL にリンクする必要があります。次に、作成した DLL を C# コードで p/invoke できます。
  2. DLL のインポート ライブラリの場合は、DLL に直接 p/invoke するだけです。ここでは、.lib ファイルは役に立ちません。
于 2012-09-06T11:16:59.940 に答える
1

ここで注意してください。私はJavaのために似たようなことをしています。

C#コードが64ビットで実行されている場合、32ビットライブラリをロードできません。最良のオプションは、ソースコードを入手して、2つの新しいバージョン(32ビットと1 64ライブラリ)を構築できるかどうかです。

ソースコードにアクセスできない場合の回避策の1つは、libを呼び出し、コマンドラインプロセスとして呼び出すことができる(出力をディスクファイルに残す)32ビットの実行可能ファイルを作成することです。その場合、64ビットシステムの32ビットコードを使用できます。もちろん、新しいプロセスなどを開始することにはペナルティがありますが、呼び出される頻度によっては、それが許容される場合があります。

于 2012-09-06T11:27:51.433 に答える
0

「Interop 101」が役立ちます。パート 2では P/Invoke を使用して C# でアンマネージ C++ メソッドを呼び出し、パート 4では C++/CLI ブリッジを使用します。

于 2012-09-06T11:18:26.307 に答える