我在主程序中定义一个变量gXm,但是在DLL中访问此变量是乱码,请问是什么问题?主程序:
...
var
gXm:Pchar;
...
procedure TForm1.Button3Click(Sender: TObject);
begin
gXm := Pchar('YCC');
end;
exports
gxm;
DLL:var
MainModuleHandle:THandle;
Pstr:PChar ;
begin
MainModuleHandle:=GetModuleHandle(pchar(ExtractFileName(application.ExeName)));
Pstr:= PChar(GetProcAddress(MainModuleHandle,pchar('gXm')));
if Pstr <> nil then
Edit1.Text := Pstr
else
Edit1.Text := 'aaa';
end;
...
var
gXm:Pchar;
...
procedure TForm1.Button3Click(Sender: TObject);
begin
gXm := Pchar('YCC');
end;
exports
gxm;
DLL:var
MainModuleHandle:THandle;
Pstr:PChar ;
begin
MainModuleHandle:=GetModuleHandle(pchar(ExtractFileName(application.ExeName)));
Pstr:= PChar(GetProcAddress(MainModuleHandle,pchar('gXm')));
if Pstr <> nil then
Edit1.Text := Pstr
else
Edit1.Text := 'aaa';
end;
这样有意义吗?
Pstr:= PChar(GetProcAddress(MainModuleHandle,pchar('gXm')))^;
后面加一个^试试
我不敢保证对
————————————————————————用参数多好?为什么要搞这么复杂呢?而且能这样用吗?我没见过
为什么要在dll中调用调用它的程序中的变量呢,它没有任何主动权的呀,如果要传递一个变量进Dll,为什么不在导出函数中以var方式传入再传出,或者直接用函数返回呢?好奇怪的想法,我想都没想过,是不是想给DLL加密?
实现你想要的效果的方法可以是用Dll给Host发消息,然后通过消息参数传回变量值。或者把变量以参数的形式放在调用Dll的函数的参数列表中。
var
MainModuleHandle:THandle;
Pstr:PChar ;
begin
try
MainModuleHandle:= LoadLibrary(PChar(Application.ExeName));
Pstr:= PChar(GetProcAddress(MainModuleHandle,pchar('gXm')));
if Pstr <> nil then
Edit1.Text := Pstr
else
Edit1.Text := 'aaa';
finally
FreeLibrary(MainModuleHandle);
end;
end;
DLL取了处理不就行了?
郁闷中..........