我想将 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 )
我对所有三种方法都做了同样的事情。然后我将编译目标设置为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”不是字节数组?