Advertised Shortcut Wahnsinn.



  • Hallo CplusPlus Community, bisher konnte ich durch lesen der Zahlreichen Forenbeiträge und Tipps immer eine Lösung finden, dazu sag ich jetzt erst mal Danke.
    Als nicht DLL Held habe ich jetzt ein Problem das mich in den Wahnsinn treibt und ich hab keine Ahnung was ich falsch mache.

    Ich möchte gerne das Ziel zur ausführbaren Datei eines Advertised Shortcuts auslesen.
    Alles funktioniert bis auf eine sache.
    Hier der Code.

    HINSTANCE hInstance;
    
       hInstance = ::LoadLibrary("Msi.dll");
       pMSIGSTA  = (MSIGSTA*)::GetProcAddress((HMODULE)hInstance, "MsiGetShortcutTargetA");
       pMSIGCPA  = (MSIGCPA*)::GetProcAddress((HMODULE)hInstance, "MsiGetComponentPathA");
    
    		UINT Result1,Result2;
    		char szProductCode[255] ,szFeatureId[255],szComponentCode[255] ;
    
    		if (pMSIGSTA)
    			Result1 = (*pMSIGSTA)("C:\\Outlook.lnk",szProductCode,szFeatureId,szComponentCode);
    
    		if (Result1==ERROR_SUCCESS) {
    
    				DWORD pathLength = 300;
    				char *sPath = new char[pathLength];
    
    			   Result2=	(*pMSIGCPA)(szProductCode,szComponentCode,sPath,&pathLength);
    
    			   ShowMessage(sPath);
    			   delete sPath;
    			}
    
       FreeLibrary(hInstance);
    

    Sobald "char *sPath = new char[pathLength];" ausgeführt wird steht in "szComponentCode" nur noch Müll ich sehe hier keinen Zusammenhang was mach ich falsch ?
    Wenn ich vor "char *sPath = new char[pathLength];" noch z.B. so etwas schreibe
    "char test[30]="kkkkkkkkkkkkk";", dann wird nach ausführen der besagten Zeile eben der Inhalt von test verändert.

    Kann mir jemand erklären wie das zusammenhängen könnte !?
    Ich benutze CBuilder2009 mit Windows 7 64bit.

    Danke im voraus.



  • Habe gerade noch herausgefunden das die Anwendung im Release Build abstürzt,
    ich vermute es hat etwas mit der Funktionsdeklaration zu tun.

    UINT MsiGetShortcutTarget(
      LPCTSTR szShortcutTarget,
      LPTSTR szProductCode,
      LPTSTR szFeatureId,
      LPTSTR szComponentCode
    );
    

    Für szProductCode, szFeatureId und szComponentCode habe ich ein char definiert,
    kann mir jemand sagen ob das so richtig ist oder wie man LPTSTR richtig einsetzt ?



  • Hat sich erledigt,
    WINAPI im typedef vergessen .... 😡 .... 🤡


Anmelden zum Antworten