Главная страница
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-49276
Бородач
2002-12-23 10:50
2003.01.16
Не встает))


14-49241
Mr.Ice
2002-12-26 17:15
2003.01.16
помогите найти компонент


1-49065
Groove_
2003-01-08 00:56
2003.01.16
Наверное глупый вопрос


1-48983
Kromag
2003-01-06 18:56
2003.01.16
Генерация


1-49028
KPV-10k
2003-01-07 22:00
2003.01.16
Cнимок изображения окна находящегося в FullScreen режиме?