Помогите создать прототип...
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
Помогите создать прототип...
Уважаемые коллеги! Помогите, пожалуйста...
Нужно вызвать функцию API. В MSDN описана так:
DWORD WINAPI MsgWaitForMultipleObjectsEx(
_In_ DWORD nCount,
_In_ const HANDLE *pHandles,
_In_ DWORD dwMilliseconds,
_In_ DWORD dwWakeMask,
_In_ DWORD dwFlags
);
Пробовал варианты:
MsgWaitForMultipleObjectsEx(DWORD,HANDLE[],DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx');
MsgWaitForMultipleObjectsEx(DWORD,*HANDLE[],DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx');
MsgWaitForMultipleObjectsEx(DWORD,HANDLE,DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx');
MsgWaitForMultipleObjectsEx(DWORD,*HANDLE,DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx')...
На все говорит "Unresolved external".
Нужно вызвать функцию API. В MSDN описана так:
DWORD WINAPI MsgWaitForMultipleObjectsEx(
_In_ DWORD nCount,
_In_ const HANDLE *pHandles,
_In_ DWORD dwMilliseconds,
_In_ DWORD dwWakeMask,
_In_ DWORD dwFlags
);
Пробовал варианты:
MsgWaitForMultipleObjectsEx(DWORD,HANDLE[],DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx');
MsgWaitForMultipleObjectsEx(DWORD,*HANDLE[],DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx');
MsgWaitForMultipleObjectsEx(DWORD,HANDLE,DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx');
MsgWaitForMultipleObjectsEx(DWORD,*HANDLE,DWORD,DWORD,DWORD),DWORD,PASCAL,RAW,NAME('MsgWaitForMultipleObjectsEx')...
На все говорит "Unresolved external".
-
- ✯ Ветеран ✯
- Сообщения: 5001
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Помогите создать прототип...
A HANDLE у Вас как описан? Определённо в нём проблемы. Ну не с DWORD?
We are hard at work… for you. ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
Помогите создать прототип...
Пробовал HANDLE, DWORD, LONG, ULONG.
В SVAPI описана аналогичная функция -
MsgWaitForMultipleObjects(long nCount, long pHandles, bool bWaitAll, long dwMilliseconds, |
long dwWakeMask),long,pascal
нет проблем... Но мне, к сожалению, нужна только эта...![Sad :-(](./images/smilies/icon_sad.gif)
В SVAPI описана аналогичная функция -
MsgWaitForMultipleObjects(long nCount, long pHandles, bool bWaitAll, long dwMilliseconds, |
long dwWakeMask),long,pascal
нет проблем... Но мне, к сожалению, нужна только эта...
![Sad :-(](./images/smilies/icon_sad.gif)
-
- ✯ Ветеран ✯
- Сообщения: 5001
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Помогите создать прототип...
Возьми свой третий вариант и убери RAW из возвращаемого параметра.
We are hard at work… for you. ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
-
- ✯ Ветеран ✯
- Сообщения: 5001
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Помогите создать прототип...
Попробовал у себя. Вот так не ругается:
Во всяком случае на этапе компиляции.
Код: Выделить всё
HWND EQUATE(UNSIGNED)
DWORD EQUATE(ULONG)
MsgWaitForMultipleObjectsEx(DWORD,HWND,DWORD,DWORD,DWORD),LONG,PASCAL,NAME('MsgWaitForMultipleObjectsEx')
We are hard at work… for you. ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
Помогите создать прототип...
Да, спасибо, так компиляцию проходит. Вываливается на этапе линковки с Unresolved external.
Вызов:
RET#=MsgWaitForMultipleObjectsEx(1,ADDRESS(HANDLES),INFINITE,QS_ALLEVENTS,0)
Вызов:
RET#=MsgWaitForMultipleObjectsEx(1,ADDRESS(HANDLES),INFINITE,QS_ALLEVENTS,0)
-
- ✯ Ветеран ✯
- Сообщения: 5001
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Помогите создать прототип...
Попробуйте вместо конструкции ADDRESS(HANDLES) поставить переменную такого же типа как в описании прототипа. Надеюсь, все остальные переменные в норме. Кстати, можно посмотреть в svcom.clw как работать с подобной функцией.
We are hard at work… for you. ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
Помогите создать прототип...
Версия Clarion не указана, хотя это важно - MsgWaitForMultipleObjectsEx появилась в WIN32.LIB только в 10-ке. Поэтому в младших версиях надо или создать свою LIB (через libmaker), или вызывать динамически (LoadLibrary/FreeLibrary/GetProcAddress).
С уважением, ДП
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
Помогите создать прототип...
Спасибо, Дед Пахом. Решилось перетаскиванием WIN32.LIB из 10-ки в 6-ку...
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
Помогите создать прототип...
Это не имеет значения. В итоге работает и с LONG'ами в прототипе. Проблема была в том, что этой функции нет в Win32.lib 6-ки, а цеплять системную user32.lib дело очень неблагодарное. Решилось перетаскиванием Win32.lib из 10-ки в 6-ку. Кроме того, в MSDN прототип был описан неверно, верное описание пришлось искать по форумам.