C++ プログラムを dll にコンパイルし、C# から使用したいと考えています。
これは c++ プログラムです。
h および c++ ファイルのヘッダーとメソッド宣言を次のように変更しました。
void MurmurHash3_x64_128 ( const void * key, int len, uint32_t seed, void * out );
に
extern "C" __declspec(dllexport) void MurmurHash3_x64_128
(const void * key, const int len, const uint32_t seed, void * out )
3つの方法すべてで同じことをしました。次に、コンパイル ターゲットを dll に設定します。それをコンパイルした後、SMHasher.dll という名前の x64 ビット dll ができました。ここで、新しい x64 ビット C# プログラムを作成し、この dll を参照として使用しました。
次に、次のように書きました。
[DllImport("SMHasher.dll")]
public static extern void MurmurHash3_x64_128(byte[] valueToHash, int len, uint seed, out byte[] hash);
private void button1_Click(object sender, EventArgs e)
{
byte[] hash;
MurmurHash3_x64_128(new byte[] { 1, 2, 3 }, 3, 0, out hash);
}
MurmurHash3_x64_128 を呼び出すと、テスト アプリがエラー メッセージなしで閉じられます。
何が問題ですか?どうすれば解決できますか?
多分問題は c++ パラメータですか? 「const void * key」はバイト配列ではないのでしょうか?