Главная страница
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.48 MB
Время: 0.026 c
14-1082982732
Drakon
2004-04-26 16:32
2004.05.23
Использование нелицензионной версии Delphi


1-1083670938
klyonov
2004-05-04 15:42
2004.05.23
TControl.Parent


7-1081846899
_Андрей
2004-04-13 13:01
2004.05.23
как из своей программы обработать Popup сообщение?


1-1083765374
rWizard
2004-05-05 17:56
2004.05.23
Создание директории (папки)


3-1083054346
Strateg2300
2004-04-27 12:25
2004.05.23
Как получить данные из ADODataSet?