COM-Bibliothek initialisieren funktioniert nicht



  • Hallo,

    ich versuche ein Stück Beispiel-Code hier aus dem Forum ans Laufen zu bringen.
    Kompilieren klappt. Aber die Com-Bibliothek lässt sich nicht initialisieren.
    Leider finde ich keine weiteren Anhaltspunkte über das 'warum'.

    Wisst Ihr Rat?!

    bool ReadShortcut(TShortcutCfg* sCfg, AnsiString slFileName)
    {
    
      bool blRetVal = true;   // Rückgabewert
      wchar_t wsz [MAX_PATH]; // Buffer für Unicode String
      char buf[MAX_PATH];
      IShellLink *psl;
      slFileName.WideChar(wsz, MAX_PATH);
    
      if(blRetVal)
      {
        // COM-Bibliothek initialisieren
        blRetVal = CoInitialize(NULL) == S_OK;
        if(blRetVal)
    
      // ...
    

    Gruß
    Leo



  • Was liefert CoInitialize(NULL) denn zurück?



  • Ohne MSDN oder ähnliches brauchst du auf dem Gebiet gar nicht erst weitermachen. 😉

    Return Values
    This function supports the standard return values E_INVALIDARG, E_OUTOFMEMORY, and E_UNEXPECTED, as well as the following:

    S_OK
    The COM library was initialized successfully on this apartment.
    S_FALSE
    The COM library is already initialized on this apartment.
    RPC_E_CHANGED_MODE
    A previous call to CoInitializeEx specified the concurrency model for this apartment as multithread apartment (MTA).

    => Returncode genauer bestimmen



  • MFK schrieb:

    Was liefert CoInitialize(NULL) denn zurück?

    Auszug aus der Hilfe zu CoInitialize:

    Return Values

    S_OK
    Indicates the library was initialized successfully.

    S_FALSE
    Indicates that the library is already initialized or that it could not release default allocator.

    E_OUTOFMEMORY
    Indicates that it was unable to initialize because the system is out of memory.

    E_INVALIDARG
    Indicates the argument is invalid.

    E_UNEXPECTED
    Indicates an unexpected error occurred.

    In meinem Fall wird S_FALSE zurück gegeben. Jetzt wäre es für mich noch toll zu wissen, an welcher Stelle diese Initialisierung bereits erfolgt ist.

    Gruß
    Leo



  • Leo Freitag schrieb:

    Jetzt wäre es für mich noch toll zu wissen, an welcher Stelle diese Initialisierung bereits erfolgt ist.

    Das kann irgendeine Bibliothek gemacht haben. Ist aber auch nicht weiter wichtig. Ändere den Code einfach so ab:

    blRetVal = SUCCEEDED(CoInitialize(NULL));
    

    CoUninitialize musst du in jedem Fall aufrufen.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten