Вниз
Скачать: CL | DM;

Использование Delphi-DLL в VB   Найти похожие ветки 

← →
Akni ©   (2004-05-06 15:59) [0]

Добрый день всем.

Ситуация такова: достался мне «в наследство» проект на VB, в котором вызываются ф-ции из Delphi-DLL. В ф-ции передаются строковые параметры, которые предыдущие разработчики, не мудрствуя лукаво, объявили как STRING
Выглядит это в данный момент так:
DLL:
function FPrint(Wnd: HWnd; s :String):integer; stdcall; export;
begin
...
end;


VB-Application

Private Declare Function FPrint Lib "PrintDLL" (ByVal Wnd As Long, ByVal s As String) As Long

Dim sPrint As String
Dim iRes as Long
sPrint = ""
sPrint = sPrint & "Param1=" & Value1 & ";Param2="  & Value2
…

iRes = Fprint(hWnd, sPrint)


Ес-но, периодически вылетает AV.

Почитав пару статей по поводу передачи строковых параметров в DLL, пришла к выводу, что декларацию переменных и вызов ф-ции в VB нужно оставить без изменений, а ф-цию в DLL нужно переделать след. образом:

function FPrint (Wnd: HWnd; s :PChar):integer; stdcall; export;

var sTemp: string;
begin
stemp:=strpas(s);
// вместо s использовать stemp
...
end;


теперь, собственно, вопрос: правильно ли это? Или необходимы еще какие-то изменения?


← →
Digitman ©   (2004-05-06 16:20) [1]


> правильно ли это?


в данном контексте - правильно


← →
Akni ©   (2004-05-06 16:30) [2]

Спасибо.
Но тогда еще один вопрос: а в каком случае это может быть неправильно?
насколько я понимаю, если бы string надо было возвращать в VB , то необходимо было бы "вручную" выделять память.

Или есть еще какие-то нюансы при передаче string как параметр, а не как результат?


← →
clickmaker ©   (2004-05-06 16:34) [3]


> Akni ©   (06.05.04 16:30) [2]

string в VB - это и есть Pchar. Для большей универсальности можно пользоваться VBэшным Variant и дельфовым OleVariant - это синонимы


← →
DevelS   (2004-05-06 16:39) [4]

У нас когда-то делали длл для VBA и с PChar тоже были проблемы.
Остановились на OleVariant в Delphi и Variant в VB.


← →
Digitman ©   (2004-05-06 16:50) [5]


> Или есть еще какие-то нюансы при передаче string как параметр


нет никаких нюансов до тех пор пока не идет речь о параметре, через который возвращается некое значение



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
3-1083077818
Азазелло
2004-04-27 18:56
2004.05.23
Вопрос по формированию бухгалтерских отчетов...


1-1084302070
I.Ru.Ru
2004-05-11 23:01
2004.05.23
Выбор при открытии файла Excel


1-1083658334
Ivolg
2004-05-04 12:12
2004.05.23
Запехнуть в exe


14-1083507052
Vlad Oshin
2004-05-02 18:10
2004.05.23
Давайте в шахматишки срубимся


7-1082023124
Rikki
2004-04-15 13:58
2004.05.23
Как заблокировать компьютер а тоесть......




   Наверх