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

Вниз

Вопрос по DLL   Найти похожие ветки 

 
Delph   (2002-06-18 10:16) [0]

Использую sharemem, при выходе из программы вылетает исключение.
В DLL в одном из функций создаю Table, но перед завершением работы с DLL другой функцией его освобождаю. Кроме того передаю параметрами и результатами функций строки. Что неправильно?
Вырезки кода:

unit UnitDLL;

interface

Uses classes;

function _Connect(StorigeName: String): boolean; export; stdcall;
function _DisConnect: boolean; export; stdcall;
.....
function _GetForm(IdObject: LongInt;
FormName,
FormDate: String): String; export; stdcall;
.....
function _GetLastError: String; export; stdcall;

implementation

uses
sharemem,
SysUtils,
DB,
VKDBFDataSet,
dialogs;

var
Table: TVKDBFNTX;
LastError: String;

function _Connect(StorigeName: String): boolean; stdcall;
begin
Result := True;
Table := TVKDBFNTX.Create(nil);
Table.AccessMode.AccessMode := 66;
Table.BufferSize := 8192;
Table.DBFFileName := StorigeName;
try
Table.Active := True;
except
on E: Exception do
begin
LastError := "Error connect to " + StorigeName;
Result := false;
end;
end;
end;

function _DisConnect: boolean; stdcall;
begin
Result := False;
try
Table.Active := False;
Table.Free;
Result := True;
except
LastError := "Error disconnect";
end;
end;

function _GetForm(IdObject: LongInt; FormName: String; FormDate: String): String;
begin
Result := "";
if Table.Locate("IDOBJECT;FORMNAME", VarArrayOf([IdObject, FormName]), [loPartialKey]) then
begin
try
if StrToDate(FormDate) = StrToDate(Table.FieldByName("DATE").AsString) then
Result := Table.FieldByName("DFM").AsString;
except
LastError := "Error date format";
end;
end;
end;

function _GetLastError: String;
begin
Result := LastError;
end;

exports
_Connect,
_DisConnect,
_GetForm,
_GetLastError;

end.


 
Игорь Шевченко ©   (2002-06-18 10:30) [1]

Знать бы, что за зверь TVKDBFNTX :-)))


 
Delph   (2002-06-18 10:44) [2]

Пробовал с обычным TTable, ситуация та же.


 
Игорь Шевченко ©   (2002-06-18 10:49) [3]

Delph (18.06.02 10:44)

Sharemem в EXE и в DLL первым unit"ом указан ?


 
Delph   (2002-06-18 10:56) [4]

Да.
Может в exe что то не так?

....
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button4Click(Sender: TObject);
private
Connect: function (StorigeName: String): boolean; stdcall;
DisConnect: function : boolean; stdcall;
...
GetForm: function (IdObject: LongInt;
FormName,
FormDate: String): String; stdcall;
iLib:HMODULE;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
iLib:=LoadLibrary("c:\storige\storige.dll");
Connect := GetProcAddress(iLib,"_Connect");
S := "c:\storige\FORMS.dbf";
Connect(S);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
P: String;
begin
@GetForm := GetProcAddress(iLib,"_GetForm");
P := GetForm(3, "FORM", DateToStr(Now));
ShowMessage(P);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DisConnect;
FreeLibrary(iLib);
end;


 
Игорь Шевченко ©   (2002-06-18 11:06) [5]

На первый взгляд, вроде правильно...

Что отладчик говорит ?


 
Delph   (2002-06-18 11:18) [6]

Игорь, я понял, самому смешно... Функцию DisConnect не проинициализировал :) Спасибо.


 
Игорь Шевченко ©   (2002-06-18 11:22) [7]

Я думал, ее инициализация находится в многоточиях, поэтому не стал заострять на этом внимание



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
3-879
Dennn_is
2002-06-07 09:42
2002.07.01
Мастерам


1-1016
Kost
2002-06-13 12:03
2002.07.01
Перехват нажатия кнопок минимизации/максимизации окна


1-980
ЛенаК
2002-06-17 09:02
2002.07.01
Печать графика в масштабе


1-958
Задумчивый
2002-06-19 14:03
2002.07.01
Размер изображения в файле bmp


14-1150
vopros
2002-05-27 15:26
2002.07.01
Кто из Питера АУУУ?Намек поняли?