Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизПроблема использования интерфейса при переводе декларации с 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c