驿
驿路的梦
Unregistered / Unconfirmed
GUEST, unregistred user!
您好,如下 DLL :
-------------------------------
library MyOne;
{...}
uses
SysUtils,
Classes;
{$R *.res}
Function One( i : Integer) : Integer ; stdcall ;
begin
Result := I + 100 ;
end;
Exports
One ;
begin
end.
----------------------------
静态调用没有错 ,可在动态调用时,LoadLibrary 可以取得Dll句柄,GetProcAddress却不能
得到函数地址 ,调用如下 :
unit Unit1;
interface
uses
...
type
TFuncOne = Function (I : Integer) : Integer ;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
...
end ;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
mh : THandle ;
TF : TFarProc ;
begin
mh := LoadLibrary(Pchar('D:/Dll/MyOne.dll')) ; // mh 得到
if mh <> 0 then
begin
TF := GetProcAddress(mh,Pchar('one')) ; // TF = Nil
ShowMessage(IntToStr(TFuncOne(TF)(0))) ;
end
else
begin
ShowMessage('The Path Wrong') ;
end;
FreeLibrary(mh) ;
end;
end.
请问为什么会有这种情况 ?
还有,在DLL中是否可以操作数据库 ? 是否可以自定义控件 ? 也就是说,DLL
可以使用在哪些场合 ?
谢谢您
-------------------------------
library MyOne;
{...}
uses
SysUtils,
Classes;
{$R *.res}
Function One( i : Integer) : Integer ; stdcall ;
begin
Result := I + 100 ;
end;
Exports
One ;
begin
end.
----------------------------
静态调用没有错 ,可在动态调用时,LoadLibrary 可以取得Dll句柄,GetProcAddress却不能
得到函数地址 ,调用如下 :
unit Unit1;
interface
uses
...
type
TFuncOne = Function (I : Integer) : Integer ;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
...
end ;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
mh : THandle ;
TF : TFarProc ;
begin
mh := LoadLibrary(Pchar('D:/Dll/MyOne.dll')) ; // mh 得到
if mh <> 0 then
begin
TF := GetProcAddress(mh,Pchar('one')) ; // TF = Nil
ShowMessage(IntToStr(TFuncOne(TF)(0))) ;
end
else
begin
ShowMessage('The Path Wrong') ;
end;
FreeLibrary(mh) ;
end;
end.
请问为什么会有这种情况 ?
还有,在DLL中是否可以操作数据库 ? 是否可以自定义控件 ? 也就是说,DLL
可以使用在哪些场合 ?
谢谢您