Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизОшибка при вызове dll из VBA Найти похожие ветки
← →
solenko © (2005-11-10 01:29) [0]Есть dll-ка с функцией
setRecoderStrings(Recoder:integer; sourceCodeString, destCodeString: PChar);
begin
if (strlen(sourceCodeString)<>strlen(destCodeString)) then
abort
else ...
end;
В VBA она поключается какPublic Declare Sub setRecoderStrings Lib "rec.dll" (ByVal recoder As Integer, ByVal sourceCodePage As String, ByVal disrCodePage As String)
s1 = "1234567890"
s2 = "0987654321"
Call setRecoderStrings(int_v, s1, s2)
Проблемма, собственно, в том, что в делфях длинны этих строк уже не равны.
В чем ошибка? В dll, или при описании функции в VBA? Как правильно все это сделать?
← →
Digitman © (2005-11-10 08:17) [1]соглашение о вызове stdcall ?
← →
solenko © (2005-11-10 09:07) [2]Честно говоря, не знаю. Я ничего дополнительно не указывал, так что соглашения о вызое такие, какимим их по умолчанию ставят делфя.
← →
Digitman © (2005-11-10 09:10) [3]
> solenko © (10.11.05 09:07) [2]
а по идее должно быть указано stdcall
← →
solenko © (2005-11-10 10:01) [4]stdcall или не помогает или я опять неправильно что-то сделал...
function getRecoder():integer; stdcall;
var
rec : PRecoder;
begin
new(rec);
rec^ := TRecoder.Create;
Result := Integer(rec);
end;
При вызове этой функции из dll делфями -- получаем норамальный указатель, и дальше все работает прекрастно. При вызове же из VBA -- функция возвращает 0, и, естественно, ничего дальше не работает.
← →
Digitman © (2005-11-10 10:13) [5]function GetRecoder:TRecoder; stdcall;
begin
Result := TRecoder.Create;
end;
procedure FreeRecoder(aRecorder: TRecoder); stdcall;
begin
aRecoder.Free;
end;
..
Public Declare Function GetRecoder Lib "rec.dll" () As Long
Public Declare Sub FreeRecoder Lib "rec.dll" (ByVal Recorder As Long) As Long
Dim Recorder As Long
Recorder = GetRecoder
..
FreeRecorder(Recorder)
а вообще весьма неразумно работать с дельфийскими объектами таким вот макаром ... очевидное решение - реализовать в dll ole-automation-объект
← →
Leonid Troyanovsky © (2005-11-10 10:15) [6]
> solenko © (10.11.05 10:01) [4]
> stdcall или не помогает или я опять неправильно что-то сделал.
> ..
Конечно, неправильно.
Не надо выделять память в dll.
Тем более, что VBA не рассчитан на работу с указателями.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c