您现在的位置是:首页
>
lib文件怎么编译成dll c#中dllimport报错
c#中dllim ort报错 c#使用dllim ort调用c++生成的dll库文件报错 报错信息为 对 PI voke 函数 xxx 的调用导致堆栈不对称 原因可能是托管的 PI voke
c#中dllimport报错
c#使用dllimport调用c++生成的dll库文件报错
报错信息为
对 PInvoke 函数 xxx 的调用导致堆栈不对称 原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配 请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
解决方法
点击C++项目属性 来到配置属性下面的C/C++ 点击高级 在右边的 调用约定 里 选择 __stdcall (/Gz)

以下是产生上述问题的原因(_stdcall与_cdecl两者之间的区别)
WINDOWS的函数调用时需要用到栈(STACK 一种先入后出的存储结构) 当函数调用完成后 栈需要清除 这里就是问题的关键 如何清除??
如果我们的函数使用了_cdecl 那么栈的清除工作是由调用者 用的术语来讲就是客户来完成的 这样带来了一个棘手的问题 不同的编译器产生栈的方式不尽相同 那么调用者能否正常的完成清除工作呢?答案是不能
lishixinzhi/Article/program/ASP/201311/21878 很赞哦! (1062)