НародЮ помогите:
Импортирую dll, написанную на коме посредством #import " .tlb"
в которой одна функция имеет параметр HWND/
А при обращении к этой функции выдается следующая ошибка
cannot convert parameter 1 from 'struct HWND__ *' to 'struct _RemotableHandle *'
Как ее обойти?
25.11.03 15:06: Перенесено модератором из 'Базы данных' — M
Здравствуйте, Vi2, Вы писали:
Vi2>Не сталкивался, даже не знаю, что посоветовать. Ну например сделать то, что просит компилятор — добавить (RemotableHandle*) перед параметром.
Здравствуйте, dida, Вы писали:
D>НародЮ помогите: D>Импортирую dll, написанную на коме посредством #import " .tlb" D>в которой одна функция имеет параметр HWND/ D>А при обращении к этой функции выдается следующая ошибка D>cannot convert parameter 1 from 'struct HWND__ *' to 'struct _RemotableHandle *'
D>Как ее обойти?
что то не совсем понятно. показывай свой #import и idl если есть
Здравствуйте, dida, Вы писали:
D>НародЮ помогите: D>Импортирую dll, написанную на коме посредством #import " .tlb" D>в которой одна функция имеет параметр HWND/ D>А при обращении к этой функции выдается следующая ошибка D>cannot convert parameter 1 from 'struct HWND__ *' to 'struct _RemotableHandle *'
D>Как ее обойти?
попробую догадаться.... у тебя Platform SDK стоит? Или просто где-то STRICT определен?
System handles that are partially remoted
Partial remoting of a handle means that it has been remoted only as long (or as a DWORD) in both inproc and remote cases. This applies to a handle that would make sense only in the process that generated it, and its remoting as a DWORD was no more than a fix to a legacy problem when some OLE interfaces became remoted. The following handles fall into this category: HWND, HMENU, HACCEL, HBRUSH, HFONT, HDC, and HICON.
All of these are USER handles and behave as described in the section about the GDI and USER handles.
In particular, the following definition has not changed for porting to 64b:
typedef union _RemotableHandle switch( long fContext ) u
{
case WDT_INPROC_CALL: long hInproc;
case WDT_REMOTE_CALL: long hRemote;
} RemotableHandle;
Then the handles are defined in the usual manner:
typedef [unique] RemotableHandle * wireHWND;
typedef [wire_marshal( wireHWND)] void * HWND;
In the future, other branches can be added fairly easily to the union to cover full support for remoting these handles if needed. Please see the section "Changing Data Types Without Changing the Interface Version" to learn more about the meaning of the lack of a default clause in a remoted union.
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
UA>typedef union _RemotableHandle switch( long fContext ) u
UA>{
UA> case WDT_INPROC_CALL: long hInproc;
UA> case WDT_REMOTE_CALL: long hRemote;
UA>} RemotableHandle;
UA>
Забыл дописать: этот union превращается в структуру после компиляции мидлом:
Здравствуйте, dida, Вы писали:
D>Здравствуйте, Vi2, Вы писали:
Vi2>>Не сталкивался, даже не знаю, что посоветовать. Ну например сделать то, что просит компилятор — добавить (RemotableHandle*) перед параметром.
D>Не помогает — первое что пробовала...
Почему же не помогает? Помогает еще как... [server idl]