MsiGetShortcutTargetA: Ich krieg's nicht hin! :mad
-
Hi,
gestern hab' ich mir den ganzen Abend um die Ohren geschlagen um dieses "simple" (?) Problem zu lösen: Ich möchte das Ziel eines Shortcuts (.lnk) mittels der MSI.dll Function MsiGetShortcutTargetA auslesen. Damit das heute nicht schon wieder passiert, bitte ich jetzt doch mal um Hilfe

Das Problem: Das Programm steigt immer an der Stelle "Could not find shortcut target" aus, obwohl argv[1] einen gültigen Shortcut mitkriegt.
#include <windows.h> #include <iostream> using namespace std; typedef unsigned int (*DLLFUNC)(const char*, char*, char*, char*); int main(int args, char* argv[]) { char productCode[39]; char componentCode[39]; if (args <= 1) return -1; HINSTANCE hinstMSI = NULL; hinstMSI = LoadLibrary("msi.dll"); // handle to MSI.dll if (!hinstMSI) { MessageBox(NULL,"Could not find MSI.dll!", "Error", MB_OK); return -1; } DLLFUNC GetShortcutTarget = (DLLFUNC)GetProcAddress(hinstMSI, "MsiGetShortcutTargetA"); if (!GetShortcutTarget) { MessageBox(NULL,"Error using MSI.dll function!", "Error", MB_OK); return -1; } if (GetShortcutTarget(argv[1],productCode,NULL,componentCode) == ERROR_FUNCTION_FAILED) { MessageBox(NULL,"Could not find shortcut target!", NULL, MB_OK); return -1; } // ab hier würde dann MsiGetComponentPath kommen, wenn das Programm bis hierhin käme... FreeLibrary(hinstMSI); return 0; }Mir geht's nicht um alternative Lösungswege (ich weiß da gibt es einige), sondern ich möchte wissen, warum mein Programm nicht funktioniert

Danke für jeden Hinweis!!!
-ZenJu
-
Keiner 'ne Ahnung?
-
Das geht nur mit speziellen Shortcuts, bei einem Shortcut von MS Word funktioniert es zum Beispiel.
Bei deinem typdef muss du noch die Calling Konvention auf __stdcall ändern, z.B. in dem du WINAPI hinzufügst.
typedef unsigned int (WINAPI *DLLFUNC)(const char*, char*, char*, char*);
-
Das geht natprlich nur mit Shortcuts, die in irgendeiner Beziehugn zu MSI (Installer, bzw. installierten Programmen) stehen... z.B. mit den Shortcuts des Desktops...