Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх





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


4-1253
V_V
2002-05-03 02:18
2002.07.01
menu


6-1132
Chris
2002-04-20 13:36
2002.07.01
Какой PPP Server посоветуете?


1-1026
Yanky-Fam
2002-06-17 21:52
2002.07.01
Вопрос есть...


1-949
BKV
2002-06-19 18:42
2002.07.01
Доступ к полям компонента, заданным в Obj Inspect в конструкторе





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