请问在Delphi中如何使用DLL中定义的变量?(50分)

  • 主题发起人 主题发起人 lw86
  • 开始时间 开始时间
L

lw86

Unregistered / Unconfirmed
GUEST, unregistred user!
在VC中可以在其生成的DLL中定义外部变量,
Delphi是否有此功能,能否使用DLL中定义
的外部变量?
 
找了半天,没有发现Delphi能够实现这样的功能...
你可以在DLL中将变量的读、写均用函数封装起来,Delphi只要调用相应的函数就可以达到
读写变量的目的了。或者,你还可以进一步在Delphi中将读、写过程用一个对象来封装,这
样就更加方便了:)
 
这样的情况最好还是使用对象操作比较好了。
清晰,规范。
 
不能直接使用!只能通过过程和函数来访问。
如果能够直接访问dll中变量,那么com技术的大部分工作都不必要了!
 
非常感谢几位的解答,但VC中的确可以做到调用DLL中定义的外部变量。
有没有正解呢?
 
动态库
library tttd;
{...}
uses
Windows,
SysUtils,
Classes;

{$R *.res}
var
XXX : Integer;

procedure Init;
begin
XXX := $55AA55AA;
MessageBox(GetActiveWindow, PChar(IntToHex(XXX, 8)), 'Init', MB_OK);
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH: Init;
end;
end;

Exports
XXX ;

begin
@DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

主程序
unit ttt;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
mh : THandle;
pX : PInteger;
begin
mh := LoadLibrary(PChar('TTTD.dll')) ;
if mh <> 0 then
begin
px := GetProcAddress(mh, 'XXX');
ShowMessage(IntToHex(px^, 8));
FreeLibrary(mh);
end;
end;

end.
 
多人接受答案了。
 
后退
顶部