Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Передача параметров при вызове функции из dll / 12 сообщений из 12, страница 1 из 1
22.10.2007, 00:38
    #34883558
blackman_odessa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
Есть потребность вызвать функцию в повер-скрипте из библиотеки 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
22.10.2007, 02:05
    #34883617
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
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
22.10.2007, 02:08
    #34883619
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
И если у Вас 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
22.10.2007, 02:19
    #34883623
18-я весна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
Ага. Судя по описанию протокола - там в data возвращаются бинарные данные.
Так что надо вместо ref string писать ref blob, иначе на первом же нулевом байте споткнется.
Ну и перед вызовом : data = Blob(Space(256))
А после вызова - парсить data с помощью BlobMid
...
Рейтинг: 0 / 0
22.10.2007, 10:53
    #34884043
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
чтобы точно ответить, необходимо:
- версия ПБ
- пример вызова ф-ции из C (инициализация параметров)
- в какие параметры ф-я будет писать, и что.
...
Рейтинг: 0 / 0
22.10.2007, 19:27
    #34886139
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
А где в Одессе, что-то разрабатывают на Sybase ASA? Как Одесситу, любопытно, - где наши люди? Если не хочется отвечать в форум, то можно в личку.
...
Рейтинг: 0 / 0
23.10.2007, 00:45
    #34886514
blackman_odessa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
Всем спасибо! Через блобы все работает аж бегом! И через строки работает, но не любит нулей как и предполагал глубокоуважаемый 18-я весна) А также через char и даже частично через uint) Я немного налажал с другой стороны - по USB передавалась уже лажа и я ее воспринимал за неправильное наполнение буфера из dll. Это я в прогу вставил индикацию правильности передачи туда и испортил передачу обратно. Вот так вот)
To GGG_old: Я не работаю ни на какие конторы, работаю сам по себе и пишу глюкалку для своей работы. Так что я скорее любитель. Но рад найти единомышленников так близко! Написал бы вличку, но не знаю где она у тебя) Если не лень - напиши мне в ICQ#: 103690263.
...
Рейтинг: 0 / 0
23.10.2007, 09:12
    #34886730
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
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
23.10.2007, 11:39
    #34887163
blackman_odessa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
Я ценю Ваш юмор, AIZ) Как найду время обязательно попробую перечисленные варианты и напишу подробный отчет. Спасибо!)
...
Рейтинг: 0 / 0
23.10.2007, 13:13
    #34887623
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров при вызове функции из dll
char ref string Не похоже на правду.

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

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


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