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

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

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

Сообщение Constantine » 18 Апрель 2018, 10:39

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

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

Сообщение kreator » 18 Апрель 2018, 11:02

A HANDLE у Вас как описан? Определённо в нём проблемы. Ну не с DWORD?
We are hard at work… for you. :)

Constantine
Бывалый
Сообщения: 79
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 18 Апрель 2018, 11:07

Пробовал HANDLE, DWORD, LONG, ULONG.
В SVAPI описана аналогичная функция -
MsgWaitForMultipleObjects(long nCount, long pHandles, bool bWaitAll, long dwMilliseconds, |
long dwWakeMask),long,pascal
нет проблем... Но мне, к сожалению, нужна только эта... :-(

kreator
Ветеран
Сообщения: 3014
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Апрель 2018, 11:18

Возьми свой третий вариант и убери RAW из возвращаемого параметра.
We are hard at work… for you. :)

Constantine
Бывалый
Сообщения: 79
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 18 Апрель 2018, 11:21

Уже убрал RAW и NAME. Не помогает.

kreator
Ветеран
Сообщения: 3014
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Апрель 2018, 11:31

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

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

  HWND                    EQUATE(UNSIGNED)
  DWORD                  EQUATE(ULONG)
  MsgWaitForMultipleObjectsEx(DWORD,HWND,DWORD,DWORD,DWORD),LONG,PASCAL,NAME('MsgWaitForMultipleObjectsEx')
Во всяком случае на этапе компиляции.
We are hard at work… for you. :)

Constantine
Бывалый
Сообщения: 79
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 18 Апрель 2018, 11:42

Да, спасибо, так компиляцию проходит. Вываливается на этапе линковки с Unresolved external.
Вызов:
RET#=MsgWaitForMultipleObjectsEx(1,ADDRESS(HANDLES),INFINITE,QS_ALLEVENTS,0)

kreator
Ветеран
Сообщения: 3014
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Апрель 2018, 11:55

Попробуйте вместо конструкции ADDRESS(HANDLES) поставить переменную такого же типа как в описании прототипа. Надеюсь, все остальные переменные в норме. Кстати, можно посмотреть в svcom.clw как работать с подобной функцией.
We are hard at work… for you. :)

Constantine
Бывалый
Сообщения: 79
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 18 Апрель 2018, 12:09

Спасибо, буду разбираться дальше...

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2120
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 18 Апрель 2018, 12:25

Версия Clarion не указана, хотя это важно - MsgWaitForMultipleObjectsEx появилась в WIN32.LIB только в 10-ке. Поэтому в младших версиях надо или создать свою LIB (через libmaker), или вызывать динамически (LoadLibrary/FreeLibrary/GetProcAddress).
С уважением, ДП

Constantine
Бывалый
Сообщения: 79
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 18 Апрель 2018, 13:07

Спасибо, Дед Пахом. Решилось перетаскиванием WIN32.LIB из 10-ки в 6-ку...

Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar » 18 Апрель 2018, 13:10

kreator писал(а):
18 Апрель 2018, 11:31
HWND EQUATE(UNSIGNED)
HWND EQUATE(LONG)
C10, Win10x64

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2120
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 18 Апрель 2018, 13:11

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

HWND  EQUATE(HANDLE)
С уважением, ДП

Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar » 18 Апрель 2018, 13:39

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

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

HWND  EQUATE(HANDLE)
Я лишь подчеркнул, что указатель должен быть знаковым.
C10, Win10x64

Constantine
Бывалый
Сообщения: 79
Зарегистрирован: 07 Февраль 2017, 16:58

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

Сообщение Constantine » 18 Апрель 2018, 13:51

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

Ответить