Здравствуйте, SkyP, Вы писали:
SP>суть проблемы:
SP>есть длл написанная на Дельфи,
SP>вызываеться из VB
SP>проблема с возвратом параметра из длл
SP>крах происходит при возврате строки из длл
SP>вопрос:
SP>какие методы кроме вызова функции есть для решения проблемы передачи данных
SP>из внешнего модуля
SP>1. функция видать непойдет
SP>2. automatation object
SP>подскажите кто с таким боролся
Все дело в разности представления строк у Delphi и VB
У VB это BSTR (Unicode строка), у Delphi PChar (указатель на массив Char) с нулевым (NULL) завершением строки
Десларим Функцию:
Public Declare Function "SomeFunc" Lib "MyLib" (ByVal retString as String, ByRef StrLen as Long) as Long
Передача строки должна быть по значению (ByVal) ибо имя строковой переменной, это итак указатель, а нам надо передать указатель на первый элемент
Создаем
массив CHAR в VB
Private ReturnedString as String * SOME_CONSTANT
И вызывает функцию
Dim lenght as Long
lenght = SOME_CONSTANT
SomeFunc(ReturnedString, lenght)
Всё. Мы имеем null terminated массив символов, который легко преобразовать в String.
Посмотреть бы объявление вызываемой функции.
А так могу посоветоввать две вещи.
1. Объявить ByVal ... As String
2.
-Объявить байтовый массив.
-В функции объявить ... As Any. Если не ошибаюсь тогда параметр передаётся по ссылке, и по заверщению функции в него набъётся информация. Только массив надо сначала объявить без размерности Dim A(), а потом изменить размер на нужный Redim A(100).
Больше без кода сказать не могу.