Главная страница
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.024 c
14-49200
Николай Быков
2002-12-23 20:07
2003.01.16
нормальное руководство по WinAPI только про OP, а не С++


14-49215
Ru
2002-12-29 15:25
2003.01.16
Именинники 1-го января (а также 30, 31 декабря)


14-49310
Странник
2002-12-28 13:47
2003.01.16
И опять о лицензионности софта.


14-49218
Юров Владимир
2002-12-27 11:24
2003.01.16
MS SQL Server и конечный пользователь


14-49271
dRake
2002-12-27 12:01
2003.01.16
ASCII/ANSI