Question

J'essaie de créer un fichier .lnk par programme. Je préférerais utiliser C, mais C ++ n’est pas un problème (et c’est ce que contient tout le contenu de MSDN).

L'exemple de code approprié est:

#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;
}

J'essaie de compléter Wineg ++ en utilisant:

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

Et j'obtiens les erreurs suivantes:

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

Des idées?

Était-ce utile?

La solution

La solution semble être de changer la section includes en:

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

Par exemple, ajoutez #define INITGUID avant tout et incluez #include <initguid.h>

Je ne sais pas pourquoi cela fonctionne.

J'ai également dû ajouter -lole32 pour corriger une erreur survenue après la résolution de celle citée.

Le code est compilé ... maintenant pour voir si je peux le faire faire ce dont j'ai besoin.

Autres conseils

L'éditeur de liens se plaint de ne pas savoir où IID_IShellLinkA est défini. Vous avez la déclaration dans un en-tête, mais il vous manque probablement une bibliothèque. Je pense que cela est défini dans libuuid , alors incluez-le dans votre commande de liaison avec -luuid. L'éditeur de liens est probablement configuré pour inclure automatiquement un certain ensemble de bibliothèques, y compris kernel32 et user32, mais uuid peut ne pas figurer dans cette liste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top