Frage

Ich versuche, eine LNK-Datei programmatisch zu erstellen. Ich würde es vorziehen C zu verwenden, aber C ++ ist in Ordnung (und ist, was die alle MSDN-Zeug ist in).

Das entsprechende Codebeispiel ist:

#include <windows.h>
#include <shobjidl.h>
#include <shlguid.h>

HRESULT CreateLink(LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPCSTR lpszDesc) {
  HRESULT hres;
  IShellLink* psl;

  /* Get a pointer to the IShellLink interface. */
  hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
                          IID_IShellLink, (LPVOID*)&psl);
  return hres;
}

Ich versuche, mit WINEG comple ++ verwenden:

wineg++ -mno-cygwin -o t t2.cpp

Und ich bin immer die folgenden Fehler:

t2-Tw9YPp.o: In function `CreateLink(char const*, char const*, char const*)':
t2.cpp:(.text+0x34): undefined reference to `IID_IShellLinkA'
/usr/bin/ld: t2-Tw9YPp.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_IShellLinkA' can not be used when making a shared object
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
winegcc: i486-linux-gnu-g++ failed

Irgendwelche Ideen?

War es hilfreich?

Lösung

scheint die Lösung zu sein, den Abschnitt zu ändern, schließt an:

#define INITGUID
#include <windows.h>
#include <shobjidl.h>
#include <shlguid.h>
#include <initguid.h>

dh, fügen #define INITGUID vor allem und umfassen #include <initguid.h>

Ich habe keine Ahnung, warum das funktioniert.

Ich musste auch -lole32 hinzuzufügen, einen Fehler zu beheben, kam nach dem zitierten eine gelöst wurde.

Der Code kompiliert ... jetzt zu sehen, ob ich es machen kann tun, was ich brauche.

Andere Tipps

Der Linker beschwert, dass sie nicht weiß, wo IID_IShellLinkA definiert ist. Sie haben die Erklärung in einem Header, aber du bist wahrscheinlich eine Bibliothek fehlt. Ich denke, es definiert ist in libuuid , so enthalten, dass in Ihrer Verknüpfung Befehl mit -luuid. Der Linker wird wahrscheinlich automatisch einen bestimmten Satz von Bibliotheken umfasst, die konfiguriert, einschließlich kernel32 und user32, aber Uuid vielleicht nur nicht auf dieser Liste sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top