Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.014 c
14-1130852087
Layner
2005-11-01 16:34
2005.11.27
Программа сравнивающая диск или дирректорию, ищу


1-1131007433
ВоваВова
2005-11-03 11:43
2005.11.27
меню для tray иконки


8-1120636507
DelphiN!
2005-07-06 11:55
2005.11.27
Изменение громкости звука в Windows, на драйверах Audigy2 zs


14-1131222143
Andy BitOff
2005-11-05 23:22
2005.11.27
Скорость света в вакууме перестала быть рекордом


6-1124185391
digger
2005-08-16 13:43
2005.11.27
Таблица маршрутизации





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский