Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизИспользование 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-ApplicationPrivate 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 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c