3 Stimmen

Abrufen des DLL-Namens, nicht Aufruf des Anwendungsnamens

Ich habe zwei COM-Klassen in C++ geschrieben, die in einer einzigen MFC-DLL enthalten sind. Sie werden als Plugins von einer Anwendung eines Drittanbieters geladen.

Wie kann ich den Dateinamen und die Versionsnummer der DLL aus diesen Klassen herausfinden?

6voto

StackedCrooked Punkte 33522
TCHAR fileName[MAX_PATH + 1];
GetModuleFileName(hInstance, fileName, MAX_PATH);

Donde hInstance ist derjenige, den Sie in der DllMain Funktion. Verwenden Sie nicht GetModuleHandle(0) denn das liefert die HINSTANCE der Host-Anwendung.

6voto

Totonga Punkte 4152

Der Haupt-DLL-Eintrag gibt Ihnen das Handle Ihrer DLL.

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)

GetModuleFileName(hInstance, buffer, MAX_PATH);

kann verwendet werden, um den Dateinamen der DLL zu erhalten.

GetFileVersionInfoSize
GetFileVersionInfo

wird verwendet, um die Dateiversion zu ermitteln.

1voto

Dave D Punkte 7888
CString GetCallingFilename(bool includePath)
{
    CString filename;
    GetModuleFileName(AfxGetInstanceHandle(), filename.GetBuffer(MAX_PATH), MAX_PATH);

    filename.ReleaseBuffer();

    if( !includePath )
    {
        int filenameStart = filename.ReverseFind('\\') + 1;
        if( filenameStart > 0 )
        {
            filename = filename.Mid(filenameStart);
        }
    }

    return filename;
}

CString GetCallingVersionNumber(const CString& filename)
{
    DWORD fileHandle, fileVersionInfoSize;
    UINT bufferLength;
    LPTSTR lpData;
    VS_FIXEDFILEINFO *pFileInfo;

    fileVersionInfoSize = GetFileVersionInfoSize(filename, &fileHandle);
    if( !fileVersionInfoSize )
    {
        return "";
    }

    lpData = new TCHAR[fileVersionInfoSize];
    if( !lpData )
    {
        return "";
    }

    if( !GetFileVersionInfo(filename, fileHandle, fileVersionInfoSize, lpData) )
    {
        delete [] lpData;
        return "";
    }

    if( VerQueryValue(lpData, "\\", (LPVOID*)&pFileInfo, (PUINT)&bufferLength) ) 
    {
        WORD majorVersion = HIWORD(pFileInfo->dwFileVersionMS);
        WORD minorVersion = LOWORD(pFileInfo->dwFileVersionMS);
        WORD buildNumber = HIWORD(pFileInfo->dwFileVersionLS);
        WORD revisionNumber = LOWORD(pFileInfo->dwFileVersionLS);

        CString fileVersion;
        fileVersion.Format("%d.%d.%d.%d", majorVersion, minorVersion, buildNumber, revisionNumber);

        delete [] lpData;
        return fileVersion;
    }

    delete [] lpData;
    return "";
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X