правильный подбор типов для Dll

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#1
Cобственно работаю с одной dll по ЕЦП
но есть подозрение что она не хочет со мной работать, так как я ей подсовываю не верный тип (от неё всегда один и тот же результат - не верный тип вх. параметров)
что требовалось:
Код:
Function nkiEnumDevices (no:integer; withcard:boolean; var name):byte
как это реализовалось на LS:
Код:
Declare Function nkiEnumDevices Lib "nkidll" (no As Integer, withcard As Boolean, sName As Variant) As Byte 

Dim i As Integer, j As Integer, s As String, w As Integer, v As Variant, mas(72) As String, no As Byte, withcard As Boolean 
Print		 "Existing readers:" 
i = 1 
no = 1 
Do 
v = mas 
withcard = False 
j = nkiEnumDevices(i, withcard, s) 
If j=0 Then 
Print s 
Else 
Exit Do 
End If 
i = i +1 
Loop While j<>0
если юзать аналогичные примера на С++ или Паскале то всё пашет
может я как-то не правильно задеклалировал функцию?
 

nvyush

Lotus team
22.04.2009
2 317
0
#3
В VBA при объявлении функций для строковых аргументов требовалось что-то типа ByVal sName As String
 

TIA

:-)
Lotus team
15.05.2009
790
3
#5
Не силён в Паскале. Какова размерность у типов integer, boolean? Каков тип у name?

Если integer - 2б
boolean - 2б
name - ASCII string
Тогда декларация такая
Declare Function nkiEnumDevices Lib "nkidll" (Byval no As Integer, Byval withcard As integer, ByVal sName As String) As integer
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#6
delphi - ls
integer - long
boolean - byte (?)
var name - byref name (вот тут уже не помню точно, но вроде это по ссылке)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#7
delphi - ls
integer - long
boolean - byte (?)
var name - byref name (вот тут уже не помню точно, но вроде это по ссылке)
В Дельфи Паскалевский синтаксис.
long - это не размерность, а имя типа.
То, что это некий выходной параметр понятно. Не ясен его тип. Если строка - то это важно. Если указатель на другой тип то можно просто как Any декларировать.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#8
В Дельфи Паскалевский синтаксис.
long - это не размерность, а имя типа.
То, что это некий выходной параметр понятно. Не ясен его тип. Если строка - то это важно. Если указатель на другой тип то можно просто как Any декларировать.
с некоторых пор, на сколько мне известно, паскаль в делфи стали называть делфи (язык).
про "long - это не размерность, а имя типа." не понял ниче, что ты хотел сказать? B)
я говорю, что переменную типа integer в делфи нельзя впихнуть в integer LS, только в Long.
не знаю чем отличается декларация as Any от as variant или от отсутствия типа :)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#10
к стати, а формат вызова не может быть проблемой?
раньше паскаль генерил паскалевский, а не стандартный, а они вроде различны, не?..
 

TIA

:-)
Lotus team
15.05.2009
790
3
#11
про "long - это не размерность, а имя типа." не понял ниче, что ты хотел сказать?

Размер данных - это сколько байт памяти требуется для его хранения.
Например, сишный int в зависимости от платформы может иметь 2, 4 и более байт.

Variant от Any отличается тем, что размер переменной типа Variant - 16 байт, плюс размер содержащегося типа, а Any передаёт только указатель - 4 байта
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#12
Размер данных - это сколько байт памяти требуется для его хранения.
Например, сишный int в зависимости от платформы может иметь 2, 4 и более байт.
я понимаю, вот я по кол-ву байт и свожу :) и получается, что integer delphi = long ls
вроде как, эти от самой платформы не зависят