c#COM对象& “在函数调用中没有正确保存ESP的值......”

时间:2012-03-22 10:58:53

标签: c# c++ com

我在c#上有一个COM对象wtitten,我在c ++ dll中使用它。

在c ++中,使用#import derective

导入COM对象

问题是当从c ++ dll调用COM对象的任何函数时,我得到运行时检查错误:

  

运行时检查失败#0 - 未正确保存ESP的值   跨函数调用。这通常是调用a的结果   用一个带有函数指针的调用约定声明的函数   用不同的调用约定声明。

在c ++ import指令生成的com对象包装器中,所有函数都声明为__stdcall

1 个答案:

答案 0 :(得分:1)

好的,看起来我找到了解决方案: 我已经为C#COM接口中的所有方法分解了In / Out / MarshalAs属性:

[Guid("EEB4C1AE-4DB2-4bdb-86D4-A429B27496A3")]
public interface IAXFarCards
{
    [DispId(1)]
    void InitDbConnection([In, MarshalAs(UnmanagedType.BStr)] string connectionString);

    [DispId(2)]
    [return: MarshalAs(UnmanagedType.I4)]
    int GetCardInfo(
        [In, MarshalAs(UnmanagedType.BStr)]             string card,
        [In, MarshalAs(UnmanagedType.VariantBool)]      bool   isTemplate,
        [In, MarshalAs(UnmanagedType.I4)]               int    cashDeskId,
        [Out, MarshalAs(UnmanagedType.VariantBool)] out bool   isActive,
        [Out, MarshalAs(UnmanagedType.I4)]          out int    discountNumber,
        [Out, MarshalAs(UnmanagedType.I8)]          out Int64  amount,
        [In, Out, MarshalAs(UnmanagedType.BStr)]    ref string ownerName,
        [In, Out, MarshalAs(UnmanagedType.I4)]      ref int    clientId
        );