Непонятная ошибка при использовании интерфейса пер
От: koka  
Дата: 19.06.02 06:52
Оценка:
Непонятная ошибка при использовании интерфейса переданного
из другого COM обьекта.
Я пытаюсь создать plugin похожий на DevStudio Add-in.
Внутри основного приложения описал и создал COM обьект Application.
Потом создаю отдельный компонент AddCt.У него есть функция
OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime,long dwCookie, VARIANT_BOOL* OnConnection);
Вызываю ее из основного приложения и передаю указатель на IApplication.
Внутри AddCt описан и создан компонент Command.У Application есть
указатель ICommand.Внутри OnConnection создается Command и вызывается
функция обьекта Application — SetAddInInfo.B нее передается указатель
на ICommand и строки с названиями методов ICommand.
После этого в основном приложении через обьект Application
можно вызывать функции ICommand.Интерфейс ICommand дуальный.
Поэтому методы можно вызывать без Invoke.
Все работает нормально.
Затем я создаю отдельный компонент Process.
Вызываю его функцию и передаю указатель на ICommand.
Вызываю функции ICommand внутри Process.
Invoke,AddRef,QueryInterface — работают нормально.
Но прямой вызов моей функции вызывает ошибку.
Debug Error !
Program : TradNSP.EXE
Module :
File : i386\chkesp.c
Line : 42
The value of ESP was not properly saved across a function call.
This is usually a result of calling a function declared with one calling
convention with a function pointer declared with a different calling convention.
В чем может быть дело?
Re: Непонятная ошибка при использовании интерфейса пер
От: DNS Россия  
Дата: 19.06.02 07:07
Оценка:
Здравствуйте koka, Вы писали:

K>Непонятная ошибка при использовании интерфейса переданного

K>из другого COM обьекта.
K>Я пытаюсь создать plugin похожий на DevStudio Add-in.
K>Внутри основного приложения описал и создал COM обьект Application.
K>Потом создаю отдельный компонент AddCt.У него есть функция
K>OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime,long dwCookie, VARIANT_BOOL* OnConnection);
K>Вызываю ее из основного приложения и передаю указатель на IApplication.
K>Внутри AddCt описан и создан компонент Command.У Application есть
K>указатель ICommand.Внутри OnConnection создается Command и вызывается
K>функция обьекта Application — SetAddInInfo.B нее передается указатель
K>на ICommand и строки с названиями методов ICommand.
K>После этого в основном приложении через обьект Application
K>можно вызывать функции ICommand.Интерфейс ICommand дуальный.
K>Поэтому методы можно вызывать без Invoke.
K>Все работает нормально.
K>Затем я создаю отдельный компонент Process.
K>Вызываю его функцию и передаю указатель на ICommand.
K>Вызываю функции ICommand внутри Process.
K>Invoke,AddRef,QueryInterface — работают нормально.
K>Но прямой вызов моей функции вызывает ошибку.
K>Debug Error !
K>Program : TradNSP.EXE
K>Module :
K>File : i386\chkesp.c
K>Line : 42
K>The value of ESP was not properly saved across a function call.
K>This is usually a result of calling a function declared with one calling
K>convention with a function pointer declared with a different calling convention.
K>В чем может быть дело?


А ты случайно в версиях заголовочных файлов к своим интерфейсам не запутался?
Не создавал ли копий заголовков с последующими ссылками к ним?
Может надо заново их синхронизировать?


Успехов!
Д.Н.С.
Re: Непонятная ошибка при использовании интерфейса пер
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.06.02 20:56
Оценка:
Здравствуйте koka, Вы писали:

KK>Debug Error !

K>Program : TradNSP.EXE
K>Module :
K>File : i386\chkesp.c
K>Line : 42
K>The value of ESP was not properly saved across a function call.
K>This is usually a result of calling a function declared with one calling
K>convention with a function pointer declared with a different calling convention.
K>В чем может быть дело?

Версия 1. Ты скомпилировал и зарегистрировал прокси/стаб, а потом изменил описание интерфейса. Это првело к тому, что методам передаются не правильные аргументы и проверка стека показывает на ошибку. У тебя вроде все типы automation-совместимые. Так что отригистрируй к чертям эту проксю и живи на automation-прокси.

Версия 2. Ты имеешь два описания интерфейсов которые различаются (например, старый #импрот).

Вариант 3. (самый хреновый) Ты прошелся по стеку.


В любом случае методом научного тыка такие вещи ловятся за 1-2 дня. Коментарь функциональность и проверяй.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.