c # COM объект & "Значение ESP не было должным образом сохранено при вызове функции ..." - PullRequest
1 голос
/ 22 марта 2012

У меня есть COM-объект wtitten на c #, и я использую его в c ++ dll.

В c ++ COM-объект импортируется с #import derective

Проблема заключается в том, что при вызове из dll c ++ любой функции COM-объекта возникает ошибка проверки во время выполнения:

Ошибка проверки времени выполнения # 0 - значение ESP не было сохранено должным образом через вызов функции. Обычно это результат вызова функция объявлена ​​с одним соглашением о вызовах с указателем на функцию объявлено с другим соглашением о вызовах.

В оболочке объекта com, сгенерированной директивой импорта c ++, все функции объявлены как __stdcall

1 Ответ

1 голос
/ 23 марта 2012

ОК, похоже, я нашел решение: Я отклонил атрибуты In / Out / MarshalAs для всех методов в интерфейсе C # COM:

[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
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...