![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FreeLibrary [D5, D6, D7, Win2k, WinXP]
ZHK © (2004-06-21 10:31:00)Здравствуйте, Господа.
Попал в затруднительную ситуацию. Тупею. :-) Вот кусок кода:
procedure TForm1.Button3Click(Sender: TObject);
var
DialogCount:TDialogCount;
DialogName:TDialogName;
DialogDescription:TDialogDescription;
DialogExecute:TDialogExecute;
SetDatabaseList:TSetDatabaseList;
LH:THandle;
SQL:TStrings;
begin
// Form6.Execute;
LH:=LoadLibrary('dll\sql1\SQL1.dll');
@DialogCount := GetProcAddress(LH,'DialogCount');
@DialogName := GetProcAddress(LH,'DialogName');
@DialogDescription := GetProcAddress(LH,'DialogDescription');
@DialogExecute := GetProcAddress(LH,'DialogExecute');
@SetDatabaseList := GetProcAddress(LH,'SetDatabaseList');
if Assigned(SetDatabaseList) then
SetDatabaseList(PostgreSQLConnectionForm.ListBox1.Items);
SQL:=TStringList.Create;
if Assigned(DialogExecute) then
begin
DialogExecute(0,SQL);
if SQL.Count>0 then
RichEdit1.Lines.Assign(SQL);
end;
SQL.Free;
FreeLibrary(LH);
{
А вот тут-то и возникает ошибка Invalid Floating Point Operation.
При необходимости могу прислать полный проект DLL-ки. Мое мыло - eug_elizarov@mail.ru
}
end;
Кто чем может. :-)
Anatoly Podgoretsky (2004-06-21 12:05:00) [21]Где и как его включил,
Думкин (2004-06-21 12:04:00) [22]> [8] ZHK © (21.06.04 12:00)
В коде во всяком случае у тебя его нет, равно как и есть ыверенность его нет в программе основной, тем более расположенном так как указано в комментарии.
ZHK (2004-06-21 12:00:00) [23]Не-а, ShareMem тоже не катит...
Игорь Шевченко (2004-06-21 11:57:00) [24]ShareMem
Думкин (2004-06-21 11:51:00) [25]А комментарий вверху для красоты?
ZHK (2004-06-21 11:44:00) [26]Вот библиотека:
library SQL1;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes,
Billing in 'Billing.pas' {Form1},
SQLTypes in '..\SQLTypes.pas';
{$R *.res}
const
DCount=1;
var
DialogNames:array[0..DCount-1] of String=('Âûáîðêà áèëëèíãà ïî íîìåðó àáîíåíòà'#0);
DialogDescriptions:array[0..DCount-1] of String=('Âûáîðêà áèëëèíãà ïî íîìåðó àáîíåíòà'#0);
DatabaseList:String;
function DialogsCount:Integer; stdcall;
begin
Result:=DCount;
end;
function DialogName(IndexOfDialog:Integer):PChar; stdcall;
begin
if (IndexOfDialog>=0) and (IndexOfDialog=0) and (IndexOfDialog
Игорь Шевченко (2004-06-21 11:15:00) [27]
> Да я его и не объявлял. Но ведь парни пишут, что для делфи
> это необязательно? Или как?
Вот если бы ты привел объявления функций в DLL и в своей программе, наверное, было бы проще диагностировать ошибку...
ZHK (2004-06-21 10:53:00) [28]А, собственно, и не помогло. :-(
ZHK (2004-06-21 10:51:00) [29]Да я его и не объявлял. Но ведь парни пишут, что для делфи это необязательно? Или как?
Игорь Шевченко (2004-06-21 10:33:00) [30]где-то stdcall забыл объявить ?