GUID während Compile erstellen und zuordnen



  • Hallo,
    ich habe ein Visual C++ Projekt, in dem ich einen COM server implementiere. Dies klappt einwandfrei, solange ich die GUIDs für die Objekte direkt mit einem Generator erstellen lasse und fest in die Quelldatei eintrage. Nun will ich dies allerdings während des Compile automatisch generieren lassen und den Objekten zuordnen. Dies ist irgendwie etwas schwierig, da die GUIDs im .idl file eingetragen sind und dieses keine globalen Variablen aus den c-Dateien nimmt...
    Hier mein .idl file:

    import "oaidl.idl";
    import "ocidl.idl";
    import "guid.h";
    
    // define the ICommunication interface
    [object, uuid(guid),
     oleautomation, helpstring("Handles the communication")]
    interface ICommunication : IUnknown
    {
    	HRESULT GetDataInBSTR([out, retval] BSTR* pBstr);
    
    };
    
    // library statement
    [uuid(guid), version(1.0),
     helpstring("Local server with typeLib")]
    library LocalServerTypeInfo
    {
       importlib(stdole32.tlb);
       [uuid(guid)]
       coclass LocalServer
       {
          [default] interface ICommunication;
       };
    };
    

    Hier mein C file zur Generierung der GUIDs:

    #include <Rpcdce.h> // für GUID-Funktionen
    #include <string.h> // für String-Funktionen
    #include <guid.h>
    
    #pragma comment(lib, "Rpcrt4.lib") // Rpcrt4.lib einbinden (GUID-Funktionen) 
    
    void fguid()
    
    {
    
        unsigned char    *StringUuid ; // Zeiger für die Umwandlung 
        HKEY            hKeyReg ; // Registrykey 
        TCHAR           szKey[MAX_PATH] = "SOFTWARE\\Euklid\\Services\\"; // Schluessel-Path 
    
         // guid auf 0 setzen 
        memset (&guid, '\0', sizeof (guid)) ; 
        // neuen class GUID erstellen 
        if (CoCreateGuid (&guid) == S_OK){ 
            if (UuidToString (&guid, &StringUuid) == RPC_S_OK)
    		{ // GUID in "unsigned char" formatieren 
                strcpy (szGuid_class, "{") ; 
                strcat (szGuid_class, (char*) StringUuid) ; 
                strcat (szGuid_class, "}") ; 
                RpcStringFree (&StringUuid) ; 
            } 
            else
    		{ 
                MessageBox (NULL, "Fehler in GUID-Erstellung.", ":(", MB_ICONERROR) ; 
                return 0 ; 
            } 
        } 
        else
    	{ 
            MessageBox (NULL, "Fehler in GUID-Erstellung", ":(", MB_ICONERROR) ; 
            return 0 ; 
        } 
        // Registrykey mit dem neuen GUID erstellen 
        strcpy (szKey, "SOFTWARE\\Euklid\\Services\\") ; // 
        strcat (szKey, szGuid_class) ; 
        // neuen Schluessel erstellen 
        if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, szKey, 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyReg, 0) == ERROR_SUCCESS)
    	{ 
            RegCloseKey (hKeyReg) ; 
            MessageBox (NULL, szGuid, "Schlüssel registriert.", NULL) ; 
        } 
        else 
            MessageBox (NULL, "Fehler bei Schlüssel-Erstellung", ":(", MB_ICONERROR) ;
    

    Kann mir jemand helfen?


Anmelden zum Antworten