Domanda

Sto cercando di creare un file .lnk a livello di codice. Preferirei usare C, ma C ++ va bene (ed è ciò che contiene tutto il materiale MSDN).

L'esempio di codice rilevante è:

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

Sto provando a compilare con wineg ++ usando:

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

E sto riscontrando i seguenti errori:

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

Qualche idea?

È stato utile?

Soluzione

La soluzione sembra essere quella di cambiare la sezione include in:

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

ovvero, aggiungi #define INITGUID prima di tutto e includi #include <initguid.h>

Non ho idea del perché funzioni.

Ho anche dovuto aggiungere -lole32 per correggere un errore emerso dopo la risoluzione di quello citato.

Il codice viene compilato ... ora per vedere se riesco a farlo fare ciò di cui ho bisogno.

Altri suggerimenti

Il linker si lamenta di non sapere dove IID_IShellLinkA è definito. Hai la dichiarazione in un'intestazione, ma probabilmente ti manca una libreria. Penso che sia definito in libuuid , quindi includilo nel tuo comando di collegamento con -luuid. Il linker è probabilmente configurato per includere automaticamente un determinato set di librerie, inclusi kernel32 e user32, ma potresti non essere in quella lista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top