1

我编写了全部原生 C++ 代码 dll,我想使用 P/Invoke 通过 C# 代码调用他的方法。我需要为此更改本机 dll 的属性吗?

4

2 回答 2

3

P/Invoking 需要 stdcall 约定。所以看看你的所有函数声明是否都在 __stdcall 之前。否则堆栈会损坏。

另请查看PInvokeStackImbalance C# 对非托管 C++ 函数的调用

于 2012-06-05T14:36:23.827 回答
1

不,您不需要更改 DLL 本身的属性,但您需要确保调用约定与 C# 中使用的约定匹配。然后,您需要在 C# 中声明您的可调用函数,并使用匹配的参数和 C++ 中的返回类型。

现在您可以在 C# 中调用您的函数。

除了 C++ 函数的调用约定之外,它应该相当容易。

于 2012-06-05T14:31:36.210 回答