HRESULT WINAPI GetVersionInformation(
P_VERSION_INFO VersionInfo
);
P_VERSION_INFO 형식은 아래와 같습니다.
typedef struct
{
ULONG MajorVersion;
ULONG MinorVersion;
ULONG BuildNumber;
} VERSION_INFO, *P_VERSION_INFO;
이렇게 정의가 되어있는 dll 파일을
델파이에서 GetVersionInformation 함수를 동적으로
호출할 때 파라메터를 어떻게 보내고 받아야 하나요?
참고로 작성된 코드입니다.
procedure TForm1.Button1Click(Sender: TObject);
type
VERSION_INFO = record
MajorVersion : Cardinal;
MinorVersion : Cardinal;
BuildNumber : Cardinal;
end;
P_VERSION_INFO = VERSION_INFO;
TFunc = function( P_VERSION_INFO ) : String;
var
H : THandle;
MyFunc : TFunc;
dllFileName : String;
begin
dllFileName := RadioGroup1.Items.Strings[ RadioGroup1.ItemIndex ];
H := LoadLibrary( PChar( dllFileName ) );
if H < 32 then
begin
ShowMessage( 'DLL 함수 address 찾기 실패!' );
Exit;
end;
try
GetMem( P_VERSION_INFO, SizeOf( VERSION_INFO^ ) );
@MyFunc := GetProcAddress( H, 'GetVersionInformation( VERSION_INFO )' );
FreeMem( VERSION_INFO );
if @MyFunc = nil then
begin
ShowMessage( 'DLL Address not found!' );
Exit;
end
else
begin
Edit1.Text := ( MyFunc( VERSION_INFO ) );
end;
finally
FreeLibrary( H );
end;
end;
포인터변수인것 같은데... 메모리 할당한 후에 함수호출해보세요...
var
VersionInfo: P_VERSION_INFO;
begin
GetMem(VersionInfo, SizeOf(VersionInfo^));
GetVersionInformation(VersionInfo);
// use VersionInfo variable
FreeMem(VersionInfo);
end;