dll中的函数调用没有问题,释放dll也没有问题,但是在关闭应用程序后,就弹出错误。
错误信息:Invalid pointer operation,应该是无效指针地址,但是我却一直没有发现错误.谢谢大家了!...
代码如下:
/*****************dll code********************/
library DemoDll;uses
ShareMem,
SysUtils,
Forms,
Windows,
Controls,
ActnList,
Dialogs,
Classes;{$R *.res} function Add( a : Integer; b : Integer ) : Integer; stdcall;
begin
Result := a + b;
end; exports
Add;
begin
end. /****************** app code*****************/
unit DemoFomr;interfaceuses
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
dllHandle : THandle;
InvokeFunc : function( a : Integer; b : Integer ) : Integer; stdcall;
a : Integer;
begin
dllHandle := LoadLibrary( 'E:\TestProject\DemoDelphi\BDEAM\DemoDll\DemoDll.dll' );
if dllHandle = 0 then
begin
ShowMessage( '调用类库失败.' );
exit;
end;
@InvokeFunc := GetProcAddress( dllHandle,PChar( 'Add' ) );
if @InvokeFunc = nil then
begin
ShowMessage( '调用函数失败.' );
exit;
end;
a := InvokeFunc( 5,5 );
ShowMessage( IntToStr( a ) );
@InvokeFunc := nil;
FreeLibrary( dllHandle );
end;end.
错误信息:Invalid pointer operation,应该是无效指针地址,但是我却一直没有发现错误.谢谢大家了!...
代码如下:
/*****************dll code********************/
library DemoDll;uses
ShareMem,
SysUtils,
Forms,
Windows,
Controls,
ActnList,
Dialogs,
Classes;{$R *.res} function Add( a : Integer; b : Integer ) : Integer; stdcall;
begin
Result := a + b;
end; exports
Add;
begin
end. /****************** app code*****************/
unit DemoFomr;interfaceuses
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
dllHandle : THandle;
InvokeFunc : function( a : Integer; b : Integer ) : Integer; stdcall;
a : Integer;
begin
dllHandle := LoadLibrary( 'E:\TestProject\DemoDelphi\BDEAM\DemoDll\DemoDll.dll' );
if dllHandle = 0 then
begin
ShowMessage( '调用类库失败.' );
exit;
end;
@InvokeFunc := GetProcAddress( dllHandle,PChar( 'Add' ) );
if @InvokeFunc = nil then
begin
ShowMessage( '调用函数失败.' );
exit;
end;
a := InvokeFunc( 5,5 );
ShowMessage( IntToStr( a ) );
@InvokeFunc := nil;
FreeLibrary( dllHandle );
end;end.
解决方案 »
- delphi 动态结构体数组 删除指定元素?
- lovelymelon 还有个问题,就是我想用一个按钮来选择要进行打字的文档,用什么代码啊
- 为什么我的pas无法编译生成dcu
- 如何让hook拦截到的按键消息区分大小写?
- delphi+sql技術論壇群 10998525 歡迎加入探討
- 如何计算DBGrid中某一列的总和?
- 怎样判断ACCESS表中的字段是数字?急在线等。
- 1000分,谁能实现这种界面,挑战VCL!
- 十分奇怪的调用动态连接库的问题???????????(高手请进)
- table does not exist
- 窗体最大化后,其中的所有控件按比列放大如何操作呢?? 在线等,先行谢过!!
- 表格上多行数据转移有错误,请高手帮忙解决!谢谢!
这一句会不会有问题??InvokeFunc : function( a : Integer; b : Integer ) : Integer; stdcall;
a : Integer;
变量会不会有冲突???
if @InvokeFunc = nil then
begin
ShowMessage( '调用函数失败. ' );
FreeLibrary(dllHandle); //需要卸载DLL
exit;
end
end;
try
if dllHandle = 0 then
begin
ShowMessage( "调用类库失败. " );
exit;
end;
@InvokeFunc := GetProcAddress( dllHandle,PChar( "Add " ) );
if @InvokeFunc = nil then
begin
ShowMessage( "调用函数失败. " );
exit;
end;
a := InvokeFunc( 5,5 );
ShowMessage( IntToStr( a ) );
@InvokeFunc := nil;
finally
FreeLibrary( dllHandle );
end;