Помогите создать прототип...

Разработка программ на пес его знает на чем
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Уважаемые коллеги! Помогите, пожалуйста...
Нужно вызвать функцию 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".
kreator
✯ Ветеран ✯
Сообщения: 4958
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Помогите создать прототип...

Сообщение kreator »

A HANDLE у Вас как описан? Определённо в нём проблемы. Ну не с DWORD?
We are hard at work… for you. :)
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Пробовал HANDLE, DWORD, LONG, ULONG.
В SVAPI описана аналогичная функция -
MsgWaitForMultipleObjects(long nCount, long pHandles, bool bWaitAll, long dwMilliseconds, |
long dwWakeMask),long,pascal
нет проблем... Но мне, к сожалению, нужна только эта... :-(
kreator
✯ Ветеран ✯
Сообщения: 4958
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Помогите создать прототип...

Сообщение kreator »

Возьми свой третий вариант и убери RAW из возвращаемого параметра.
We are hard at work… for you. :)
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Уже убрал RAW и NAME. Не помогает.
kreator
✯ Ветеран ✯
Сообщения: 4958
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Помогите создать прототип...

Сообщение kreator »

Попробовал у себя. Вот так не ругается:

Код: Выделить всё

  HWND                    EQUATE(UNSIGNED)
  DWORD                  EQUATE(ULONG)
  MsgWaitForMultipleObjectsEx(DWORD,HWND,DWORD,DWORD,DWORD),LONG,PASCAL,NAME('MsgWaitForMultipleObjectsEx')
Во всяком случае на этапе компиляции.
We are hard at work… for you. :)
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Да, спасибо, так компиляцию проходит. Вываливается на этапе линковки с Unresolved external.
Вызов:
RET#=MsgWaitForMultipleObjectsEx(1,ADDRESS(HANDLES),INFINITE,QS_ALLEVENTS,0)
kreator
✯ Ветеран ✯
Сообщения: 4958
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Помогите создать прототип...

Сообщение kreator »

Попробуйте вместо конструкции ADDRESS(HANDLES) поставить переменную такого же типа как в описании прототипа. Надеюсь, все остальные переменные в норме. Кстати, можно посмотреть в svcom.clw как работать с подобной функцией.
We are hard at work… for you. :)
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Спасибо, буду разбираться дальше...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Помогите создать прототип...

Сообщение Дед Пахом »

Версия Clarion не указана, хотя это важно - MsgWaitForMultipleObjectsEx появилась в WIN32.LIB только в 10-ке. Поэтому в младших версиях надо или создать свою LIB (через libmaker), или вызывать динамически (LoadLibrary/FreeLibrary/GetProcAddress).
С уважением, ДП
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Спасибо, Дед Пахом. Решилось перетаскиванием WIN32.LIB из 10-ки в 6-ку...
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Помогите создать прототип...

Сообщение vic7tar »

kreator писал(а): 18 Апрель 2018, 11:31 HWND EQUATE(UNSIGNED)
HWND EQUATE(LONG)
C10, Win10x64
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Помогите создать прототип...

Сообщение Дед Пахом »

Код: Выделить всё

HWND  EQUATE(HANDLE)
С уважением, ДП
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Помогите создать прототип...

Сообщение vic7tar »

Дед Пахом писал(а): 18 Апрель 2018, 13:11

Код: Выделить всё

HWND  EQUATE(HANDLE)
Я лишь подчеркнул, что указатель должен быть знаковым.
C10, Win10x64
Constantine
Активист
Сообщения: 185
Зарегистрирован: 07 Февраль 2017, 16:58

Помогите создать прототип...

Сообщение Constantine »

Это не имеет значения. В итоге работает и с LONG'ами в прототипе. Проблема была в том, что этой функции нет в Win32.lib 6-ки, а цеплять системную user32.lib дело очень неблагодарное. Решилось перетаскиванием Win32.lib из 10-ки в 6-ку. Кроме того, в MSDN прототип был описан неверно, верное описание пришлось искать по форумам.
Ответить