Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Проблема использования интерфейса при переводе декларации с C   Найти похожие ветки 

 
McSimm ©   (2004-07-30 13:45) [0]

Буду признателен за любые идеи, поскольку сам уже несколько дней в тупике.

Есть задача - написание плагина на Делфи для приложения MyIE2.
Есть SDK на языке C с примерами.

В простейшем случае мне необходимо создать класс, реализующий инетрфейс IMyIEClient с тремя методами.
Здесь все в порядке. Все три метода вызываются в нужное время и корректно отрабатывают, за исключением следующего:

Метод
function TMyMyIEClient.Init(MyIEServer: IMyIEServer): BOOL;
должен получить некий интерфейс IMyIEServer, тоже описанный в SDK.
Отладка показывает, что какое-то значение, очень похожее на указатель на интерфейс в процедуру попадает.
Любая попытка использовать это как интерфейс (_AddRef, QueryInterface или что-либо еще) приводит к некорректной работе, а именно - возврат в отладчик после обращения к методу не происходит. Иногда хост-приложение сообщает об ошибке.
Все говорит за то, что неправильно переведено описание интерфейса.

Привожу декларации:
SDK :
const IID IID_MYIEServer={
0x2bb9cb40,0xc67d,0x4bfc,0x8f, 0x3f, 0x14, 0x1d, 0xdc, 0x53, 0x7a, 0xc7};
struct MyIEInfo
{
HWND hMainWnd;
HMENU hMainMenu;
};
class IMyIEServer:public IUnknown  
{
public:
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject) = 0;
virtual ULONG STDMETHODCALLTYPE AddRef() = 0;
virtual ULONG STDMETHODCALLTYPE Release() = 0;
virtual MyIEInfo* STDMETHODCALLTYPE GetInfo()=0;
IMyIEServer(){};
virtual ~IMyIEServer(){};
};

Delphi:
 IMyIEServer = interface(IUnknown)
 ["{2bb9cb40-c67d-4bfc-8f3f-141ddc537ac7}"]
   function GetInfo: PMyIEInfo; stdcall;
 end;

Пример на С использования этого интерфейса :
//-----------------IMyIEClient----------------------------------------//
BOOL Init(IMyIEServer* pServer)
{
 m_pMyIEServer = pServer;
 pServer->AddRef();
 HWND hwnd = pServer->GetInfo()->hMainWnd;
 return TRUE;
}          
BOOL Exit()
{
 m_pMyIEServer->Release();
 return TRUE;
}
------------
Спасибо за ваше внимание.


 
Бином Ньютоныч   (2004-07-30 14:00) [1]

function TMyMyIEClient.Init(const MyIEServer: IMyIEServer): BOOL;
Или отключи оптимизацию.


 
McSimm ©   (2004-07-30 14:13) [2]


> function TMyMyIEClient.Init(const MyIEServer: IMyIEServer):
> BOOL;

делал и так - результат одинаковый.



Страницы: 1 вся ветка

Текущий архив: 2004.08.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.045 c
6-1087317889
Игорь
2004-06-15 20:44
2004.08.15
Вопрос по функции InetIsOffline


3-1090149029
buka
2004-07-18 15:10
2004.08.15
Как заставить включиться в работу клавишу abcDB SuperNav


3-1090386222
Sergey Vorobyev
2004-07-21 09:03
2004.08.15
Сравните MySQL и Interbase, хотя бы по одной фразе


14-1091101393
GrigP
2004-07-29 15:43
2004.08.15
Расположение папок с данными программы


3-1090325619
ksa2002
2004-07-20 16:13
2004.08.15
Проблема с диалектом (DATE)