Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.16;
Скачать: CL | DM;

Вниз

Как в DLL передать указатель на переменную, а потом вернуть его?   Найти похожие ветки 

 
UserL   (2003-01-06 08:18) [0]

Вот сама функция в DLL
function Test(ConnectStr: String; Buffer: Pointer): Boolean; stdcall
Var
ConnectTo: TADOConnection;
Ret: String;
begin
CoInitialize(Nil);
Result := False;
ConnectTo := TADOConnection.Create(nil);
ConnectTo.ConnectionString := ConnectStr;
Try
ConnectTo.Connected := True
Finally
ConnectTo.Free;
End;
//ConnectTo для проверки
Ret := "gggggggggggg";
CopyMemory(Buffer, @Ret, SizeOf(Ret));
Result := True;
CoUninitialize;
end;


А вот вызов этой функции


procedure TForm1.Button1Click(Sender: TObject);
Var LibHandle: THandle;
ConStr: String;
s: String;
begin
s := Edit2.Text;
Edit2.Text := "";
ConStr := Edit1.Text;
CoInitialize(Nil);
@ShowAbout:=Nil;
LibHandle:=LoadLibrary(PChar(ExtractFilePath(Application.ExeName)+"ExportDll.dll"));
If LibHandle>=32 Then
Begin
@ShowAbout:=GetProcAddress(LibHandle, "Test");
If @ShowAbout<>Nil
Then If ShowAbout(ConStr, @s)
Then Panel1.Caption := "Yes"
Else Panel1.Caption := "No";
End;
Edit2.Text := s;
FreeLibrary(LibHandle);
end;

Ну вот на FreeLibrary(LibHandle) постоянно Exception вылетает.
Я так подозреваю что в DLL не правильно написал... А вот что именно не знаю...
Подскажите...


 
Anatoly Podgoretsky ©   (2003-01-06 09:46) [1]

@s и @ret это не адрес строки(буфера) а адрес переменной.
SizeOf(Ret)) аналогичино размер этой переменной, всегда 4 байта

У тебя большие пробелы по работе со строками и указателями.
Такие вещи надо передавать или как PChar(s) или как @S[1]
Желательно и параметр объявить как PChar.
Так же и другни проблемы с несоблюдением границ, например выделено 3 байта под строку а пытаешься присвоить 12 байт.



Страницы: 1 вся ветка

Текущий архив: 2003.01.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
6-49184
shershVVV
2002-11-18 18:53
2003.01.16
*.ocx файл


7-49325
alexta
2002-11-02 15:33
2003.01.16
Как узнать размер папки или количество файлов в ней без FindNext


14-49212
Андрей Драница
2002-12-28 04:24
2003.01.16
Программа для работы с документами.


3-48914
aus
2002-12-20 20:44
2003.01.16
Транзакции (ADO)


3-48855
LevitovVL
2002-12-23 15:44
2003.01.16
Рекурсивный вызов функций(процедур) в SQL-Server