Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: 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 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.038 c
1-1083757608
DimonNew
2004-05-05 15:46
2004.05.23
ini файл


14-1083249941
Piter
2004-04-29 18:45
2004.05.23
Как правильно читается слово "Inherited" ?


14-1083266065
ANDREY'S
2004-04-29 23:14
2004.05.23
Рабочий сто виндоус


4-1081318448
DennisLNC
2004-04-07 10:14
2004.05.23
Mutex


6-1081284805
Rander
2004-04-07 00:53
2004.05.23
Http Encode