我目前在开发的一个项目中,有一个主程序EXE,各个模块用DLL调用,我现在定义了一个TGLOBLE.PAS文件,
专门用来存储全局变量,在每个模块的DLL中,我USES 了TGLOBLE,在需要用到全局变量的窗口中,我也USES
了TGLOBLE;我给TGLOBLE中的全局变量赋值了,但是就是在调用全局变量值的时候,该值为空。不知道为什么?
专门用来存储全局变量,在每个模块的DLL中,我USES 了TGLOBLE,在需要用到全局变量的窗口中,我也USES
了TGLOBLE;我给TGLOBLE中的全局变量赋值了,但是就是在调用全局变量值的时候,该值为空。不知道为什么?
解决方案 »
- 【bitxunmeng】生日快乐,男人不该让女人流泪
- 获取网页源码socket error #10061
- 这个函数怎么在vc里面调用?
- 如何基于WEB方式,对软件进行注册?
- delphi调用XML中的数据及字体问题
- 程序最大化的问题
- 我的报表为什么打印预览时只显示一部分(因为报表根打印出大量的数据所以我设计的时候用的是A3)如果把纸设得小一些能预览的范围就大一些
- 谁能说一说Tmemo类是怎样编辑文字的,过程,方法等等,高分有送
- 我使用定時器的時候占用很大內存,怎麽讓程序點用更少的資源?
- ★★★★★★★★300分求购最酷的按钮控件★★★★★★★★
- 如何将aa.jpg文件转换为aa.bmp格式的文件?
- 请问怎么将Excel文件转换为dbase3格式!!急!!
专门用来存储全局变量,在每个模块的DLL中,我USES 了TGLOBLE,在需要用到全局变量的窗口中,我也USES
了TGLOBLE;我给TGLOBLE中的全局变量赋值了,但是就是在调用全局变量值的时候,该值为空。不知道为什么?
第二,看看有没有类型转换的问题。比如在Delphi里调用DLL里字符串类型的变量需要用PChar。
但是,在不同的工程中引用统一个单元就不能共享数据了,而是在每个工程中都有一份这样的数据,而且互相没有任何关系。
注意:每个dll都是一个新的工程。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure pro_click(sender:TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
jk_handle:Thandle;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
pro_click(self);
end;procedure TForm1.pro_click(Sender: TObject);
var
ls_menu:string;
jk:procedure (cs_gzbh,cs_xm,cs_bmfs:string);stdcall;
// 传递参数:工作编号,姓名,编码方式
begin jk_handle:=loadlibrary(pchar('new'));
if jk_handle<=0 then // 不存在DLL
begin
Application.messagebox('动态链接库加载失败!','提示',64);
exit;
end
else // 存在DLL
begin
try
@jk:=GetprocAddress(jk_handle,'jk_cscd');
jk('1','2','3');
except
Application.messagebox('动态链接库加载失败!','提示',64);
exit;
end; // end of except
end;
end;end.//////////////////////////////////////////////调用的new.dll的代码:
library new;uses
Forms,
Unit1 in 'Unit1.pas' {Form1};{$R *.RES}
exports
jk_cscd;//传入gzbh,接口过程begin
{Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;}
end.
_______________________________________unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
procedure jk_create;// 建立表单
procedure jk_free; // 释放表单
procedure jk_cscd(cs_gzbh:string;cs_xm:string;cs_bmfs:string);stdcall;implementation{$R *.DFM}
procedure jk_create;//建立表单
begin
Application.CreateForm(Tform1, form1);
end;procedure jk_free;//释放表单
begin
if assigned(form1) then form1.Free;
end;procedure jk_cscd(cs_gzbh,cs_xm,cs_bmfs:string);stdcall;
begin
try
jk_create;
form1.Label1.Caption:=cs_gzbh+','+cs_xm+','+cs_bmfs;
form1.ShowModal;
finally
jk_free;
end;
end;
end.
自己研究吧!!!
------进步才是硬道理[email protected]