dll中如何得到调用它的exe文件名?(100分)

  • 主题发起人 主题发起人 xuhao1
  • 开始时间 开始时间
X

xuhao1

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,请给代码
 
Application.ExeName
 
你想干什么?DLL的机制没有提供这个功能,理论上是没有办法做到的。所以不要太相信你的判断力,直接告诉别人你的最终目的。
 
paramstr(0)
 
GetModuleName(null);
 
uses Windows, PsAPI;
var
gDir: array[0..9999]of Char;

function ctGetExeDir: PChar;
var
hPro, hMod: Cardinal;
count: Cardinal;
begin
result:= @gDir[0];
if gDir[0] <> #0 then Exit;
ZeroMemory(@gDir[0],SizeOf(gDir));
hPro:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,GetCurrentProcessID);
if hPro <> 0 then try
if EnumProcessModules(hPro,@hMod,4,count) then begin
count:= GetModuleFileName(hMod,@gDir[0], SizeOf(gDir));
if count >0 then begin
// success
end;
finally
CloseHandle(hPro);
end;
end;
供你参考
 
DLL是被EXE调用的,怎么得到啊?
就像类中怎么得到对象的名字一样。
 
类中不能得到对象的名字么!?!?!?!?
 
到现在才发现xuegaoyili大侠已经给了答案,惭愧!!之前的答案收回
 
获取exe的名称:Application.Exename或paramstr(0)
取得DLL本身的名称:getModuleName(hInstance)
 
传一个参数进去,调用前先执行一下下!
需要在DLL中多增加一个函数
function SetExeName:Pchar;
绝对可用
 
后退
顶部