powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Передача параметров при вызове функции из dll
12 сообщений из 12, страница 1 из 1
Передача параметров при вызове функции из dll
    #34883558
blackman_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть потребность вызвать функцию в повер-скрипте из библиотеки dll.
Если б я подключал бы ее в Си-шный проект, то я б объявил ее прототип как:
Код: plaintext
bool RxFrameUSB(DWORD To, unsigned char &ADD, unsigned char &CMD, unsigned char &N, unsigned char *Data).
Объявил я ее в Global External Function и загвоздка в передаче последнего параметра. Во-первых типа unsigned char нет в PowerBuilder-е - чем его можно заменить? Во-вторых параметр нужно передать ссылкой... Вот мой вариант:
Код: plaintext
FUNCTION boolean RxFrameUSB(long Timeout, ref uint ADDR,ref uint CMD, ref uint N, ref uint data[] ) LIBRARY "wusb32.dll" 
и вызываю я ее:
Код: plaintext
 RxFrameUSB( 500 ,addr,cmd,n, data[]), где data[] объявлена как uint data[ 100 ]. 
Все параметры передаются ок, а в буфер data[] ничего не записывается. В чем моя ошибка?
Заранее благодарен за любую помощь!
P.S. Один тутошний форумчанин, спасибо ему огромное, подсказал, что можно передавать ссылку на строку.
Код: plaintext
FUNCTION boolean RxFrameUSB(long Timeout, ref uint ADDR,ref uint CMD, ref uint N, ref string data ) LIBRARY "wusb32.dll" 
В этом случае данные уже записываются, но неверные. Может еще у кого будут идейки?
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34883617
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blackman_odessa
Код: plaintext
FUNCTION boolean RxFrameUSB(long Timeout, ref uint ADDR,ref uint CMD, ref uint N, ref string data ) LIBRARY "wusb32.dll" 
В этом случае данные уже записываются, но неверные. Может еще у кого будут идейки?
Приведенное объявление должно работать.

Делается ли
Код: plaintext
1.
2.
3.
N =  0  
Addr =  0 
cmd =  0 
data = Space( 256 ) 
перед вызовом
и
Код: plaintext
data = Left(data, N) 
после вызова?
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34883619
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И если у Вас PB10 и выше то добавить в объявление модификатор "ansi":
Код: plaintext
1.
FUNCTION boolean RxFrameUSB(long Timeout, ref uint ADDR,ref uint CMD, ref uint N, ref string data ) 
   LIBRARY "wusb32.dll" ALIAS FOR "RxFrameUSB;Ansi" 
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34883623
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Судя по описанию протокола - там в data возвращаются бинарные данные.
Так что надо вместо ref string писать ref blob, иначе на первом же нулевом байте споткнется.
Ну и перед вызовом : data = Blob(Space(256))
А после вызова - парсить data с помощью BlobMid
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34884043
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы точно ответить, необходимо:
- версия ПБ
- пример вызова ф-ции из C (инициализация параметров)
- в какие параметры ф-я будет писать, и что.
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34886139
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где в Одессе, что-то разрабатывают на Sybase ASA? Как Одесситу, любопытно, - где наши люди? Если не хочется отвечать в форум, то можно в личку.
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34886514
blackman_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо! Через блобы все работает аж бегом! И через строки работает, но не любит нулей как и предполагал глубокоуважаемый 18-я весна) А также через char и даже частично через uint) Я немного налажал с другой стороны - по USB передавалась уже лажа и я ее воспринимал за неправильное наполнение буфера из dll. Это я в прогу вставил индикацию правильности передачи туда и испортил передачу обратно. Вот так вот)
To GGG_old: Я не работаю ни на какие конторы, работаю сам по себе и пишу глюкалку для своей работы. Так что я скорее любитель. Но рад найти единомышленников так близко! Написал бы вличку, но не знаю где она у тебя) Если не лень - напиши мне в ICQ#: 103690263.
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34886730
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Microsoft PowerBuilder(32Bit)
---------------------------------------------
bool boolean
char ref string
colorref ulong
dword ulong
handle ulong
hdc ulong
hfile ulong
hinstance ulong
hwnd ulong
int int
lparm ulong
ppbyte ref long
lpdword ref ulong
lpfiletime ref time
lpint ref long
lptstr ref string
lpvoid ref struct struct_instance
mcierror long
lpststr ref string
lpvoid ref struct struct_instance
pbyte ref long
short int
structure ref struct struct_instance
uint uint
void subroutine
word uint
wparam ulong
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34887163
blackman_odessa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ценю Ваш юмор, AIZ) Как найду время обязательно попробую перечисленные варианты и напишу подробный отчет. Спасибо!)
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34887623
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char ref string Не похоже на правду.

Вот если бы так:char* ref string
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34888342
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не юмор, а соответствие типов параметров
...
Рейтинг: 0 / 0
Передача параметров при вызове функции из dll
    #34888369
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int int неправильно
int в 32bit занимает 4 байта, т.е. long в ПБ

то-же с uint
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Передача параметров при вызове функции из dll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]