Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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-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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.034 c
1-1083905152
russko
2004-05-07 08:45
2004.05.23
ДЛя тех, кто пользовался XLReport


14-1083494958
Piter
2004-05-02 14:49
2004.05.23
Мания величия?


1-1084201318
ceval
2004-05-10 19:01
2004.05.23
вывести дату обновления файла в Label


9-1072205907
SoS
2003-12-23 21:58
2004.05.23
в примерах делфиХ нашел пример, но там безконечная карта!! как...


1-1084355523
Zlod3y
2004-05-12 13:52
2004.05.23
TImage!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский