3

我正在尝试编写reconstructMe SDK的“一分钟”示例,但是我认为他们的SDK是用c ++编写的,我按照他们的页面(此处)的指示成功创建了一个控制台应用程序,但我想创建一个简单的用户界面,但是我对 Visual c++ 不是很熟悉(我确实对 c++ 有所了解),所以我尝试了他们的 C# 示例(我对他们的 UI 设计非常熟悉)但是在使用提供的 C# 代码时出现此错误(这里):

调用 PInvoke 函数 'Lala!Lala.Reme::reme_context_compile' 使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。

我认为是配置项目或类似的问题。

4

1 回答 1

1

rebuildMe DLL 使用 C调用约定( Cdecl) 而不是 Windows 调用约定 ( StdCall)。它们在处理堆栈的方式上有所不同,这就是为什么不正确的调用约定会导致堆栈不平衡的原因。

p/Invoke 的默认值为StdCall,您需要手动将CallingConvension参数设置CdeclDllImport属性:

[DllImport("example.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern int function(int param);
于 2012-10-29T16:14:05.163 回答