![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Если указываю tmpBinar: byte, то получаю в ответ 1 байт, но в buf висит 35 байт. Если пробую tmpBinar представить как массив, то получаю ошибку "Несовместимые типы: 'byte' and 'Array'".
Код:
implementation Function _Binar (var buf: byte; var buflen: longint; txt: pchar) : Integer; stdcall; external 'abc.dll'; Function Binar(var bufbin : string; var buflen : longint; pos : pchar) : Integer; var tmpBinar : array [0..255] of byte ; n : Integer; begin result := _Binar (tmpBinar, n, pos); end; PS/ Поторопился. Вопрос решился так: type DbyteArr=array of byte; Последний раз редактировалось Olstgel, 27.01.2018 в 00:27. |
#2
|
|||
|
|||
![]() Ой, чей-то я сомневаюсь, что это правильная декларация. Длл небось на С/С++ написана? И тип указан что-нить типа byte** или byte[]*?
|
#3
|
|||
|
|||
![]() Не, из VB срисовывал.
...(ByRef buf() as byte, ByRef buflen As Integer, ByVal txt As String)... |
#4
|
||||
|
||||
![]() не совсем понятно..
|
#5
|
|||
|
|||
![]() А чего непонятного. Массив в дельфях выглядит немного по другому, нежели в С или VB. Я подозреваю, что там просто надо передать указатель на начало некоторого блока памяти. Т.е. импорт функции скорее всего неправильный, просто в данном частном случае срабатывает правильно, но не факт, что будет работать правильно всегда. Вот я и задал вопрос - а как эта функция описана в исходниках самой библиотеки, а то может быть вариант с PAnsiChar будет гораздо более правильным. Все зависит от самой функции, версии дельфей (Unicode или нет) и платформы, под которую собирается код (32 или 64 бит).
|