2008-08-05 32 views
25

Tệp exe của Windows có quyền truy cập vào chuỗi lệnh đã gọi nó, bao gồm đường dẫn và tên tệp của nó. ví dụ. C:\MyApp\MyApp.exe --help.Dll Windows có thể lấy tên tệp riêng của mình không?

Nhưng điều này không phải như vậy đối với một dll được gọi qua LoadLibrary. Có ai biết một cách cho một dll để tìm ra con đường và tên tập tin của nó là gì?

Cụ thể là tôi quan tâm đến giải pháp Delphi, nhưng tôi nghi ngờ rằng câu trả lời sẽ khá giống với mọi ngôn ngữ.

Trả lời

35

Tôi nghĩ bạn đang tìm kiếm GetModuleFileName.

http://www.swissdelphicenter.ch/torry/showcode.php?id=143:

{ 
    If you are working on a DLL and are interested in the filename of the 
    DLL rather than the filename of the application, then you can use this function: 
} 

function GetModuleName: string; 
var 
    szFileName: array[0..MAX_PATH] of Char; 
begin 
    FillChar(szFileName, SizeOf(szFileName), #0); 
    GetModuleFileName(hInstance, szFileName, MAX_PATH); 
    Result := szFileName; 
end; 

chưa được kiểm tra tuy nhiên, được một thời gian kể từ khi tôi làm việc với Delphi :)

+5

SysUtils có GetModuleName - đã từ D7, tôi nghĩ. –

+2

Kể từ Delphi XE, 'GetModuleName' được định nghĩa trong đơn vị * System.pas * – menjaraz

+1

Trong Delphi 6,' Windows' được yêu cầu trong mệnh đề 'uses' để định nghĩa' MAX_PATH'. – w5m