【发布时间】:2012-04-06 22:25:41
【问题描述】:
我在 c# 上有一个 COM 对象,我在 c++ dll 中使用它。
在 c++ 中,COM 对象是用#import derective 导入的
问题是,当从 c++ dll 调用 COM 对象的任何函数时,我会遇到运行时检查错误:
运行时检查失败 #0 - ESP 的值未正确保存 通过函数调用。这通常是调用 用一个调用约定和一个函数指针声明的函数 使用不同的调用约定声明。
在c++ import指令生成的com对象包装器中,所有函数都声明为__stdcall
【问题讨论】:
-
这是 COM 调用的一个非常不寻常的问题,调用约定和参数类型都是机器生成的。您需要更好地描述您的代码,至少发布 C# 声明和 C++ 调用的 sn-ps。简单的解释是您使用的是旧版本的类型库。
-
看起来我找到了解决方案:我已经为 c# COM 中的所有方法和参数声明了 In/Out/MarshalAs 属性