2

system32 (shell32.dll) から DLL を開いていますが、そのバージョンを取得したいと考えています。どうすればできますか?私はそれを書き始めましたが、続行する方法がわかりません:

また、次のような関数があることも確認しました: GetFileVersionSize 、それらを使用する方法はありますか?

これはコードです。誰かがそれを続けて手がかりを与えるのを手伝ってくれるなら、私は本当にそれを感謝します

ありがとう!

#define PATH    "C:\\Users\\rachel\\Desktop\\shell32.dll"

PVERSION dll_getVersion(PCHAR pDllPath)
{
 PVERSION       version             =   NULL;
 HINSTANCE      dllLoad             =   NULL;
 HRSRC          resourceHandle      =   NULL;
 HGLOBAL            loadResourceHandle  =   NULL;
 LPVOID         lockResourceHande   =   NULL;
 DWORD          sizeOfResource      =   0;

 //LPCTSTR  lptstrFilename = NULL;
 //DWORD    dfHandle = 0;
 //DWORD dwLen = 0;
 //LPVOID   lpData = NULL;
 //BOOL test = FALSE;

 //DWORD fileVersionSize = 0;
 //unsigned long u = 0;
 //fileVersionSize = GetFileVersionInfoSize(PATH , &u);

 //test = GetFileVersionInfo(PATH, dfHandle , dwLen ,lpData);



if (NULL == pDllPath)
{
    printf("error #1 : dllPath is invalid \n");
    return version;
}

version = (PVERSION)calloc(1,sizeof(VERSION));
if (NULL == version)
{
    printf("the allocation failed \n");
    return version;
}

//opening the dll using the path */
dllLoad = LoadLibrary(pDllPath);
if (NULL == dllLoad)
{
    printf("failed to load the dll ! \n");
    printf("the last error is : %d\n" , GetLastError());
    free(version);
    version = NULL;
    return version;
}

resourceHandle          =    FindResource(dllLoad ,MAKEINTRESOURCE(16) , RT_VERSION);
if (NULL == resourceHandle)
{
    printf("problem with find resource!!!! \n");
    return NULL;
}
loadResourceHandle      =    LoadResource(dllLoad , resourceHandle);

if (NULL == loadResourceHandle)
{
    printf("problem with load resource function! \n");
    return NULL;
}

lockResourceHande = LockResource(loadResourceHandle);
if (NULL == lockResourceHande)
{
    printf("error in lock resource function \n");
    return NULL;
}

sizeOfResource = SizeofResource(dllLoad, resourceHandle);
4

2 に答える 2

2

ここに例を示します。これがお役に立てば幸いです。GetFileInfoSize を呼び出し、そのサイズのバッファーを割り当て、割り当てたバッファーを GetFileInfo に渡し、GetFileInfo に渡した初期化されたバッファーを VerQueryValue で使用します。

于 2012-11-25T15:45:44.127 に答える
1

DLLのバージョンを取得するには、実際には2つの方法があります。多くのシステムDLLは関数をエクスポートしDllGetVersion()ます。そうでないDLLの場合はGetFileVersionInfo()、関連する関数にフォールバックする必要があります。次の記事は、両方の使用例を示しています。

DLLまたは実行可能ファイルのバージョン番号の決定

于 2012-11-25T18:38:53.500 に答える