Pergunta

Eu estou tentando criar um arquivo .lnk programaticamente. Eu preferiria usar C, mas C ++ é muito bem (e é o que todo o material MSDN é in).

O exemplo de código relevante é:

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

Eu estou tentando comple com wineg ++ usando:

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

E eu estou recebendo os seguintes erros:

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

Todas as idéias?

Foi útil?

Solução

A solução parece ser a de mudar a seção inclui a:

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

ou seja, adicionar #define INITGUID antes de tudo e incluem #include <initguid.h>

Eu não tenho idéia por que isso funciona.

Eu também tive que adicionar -lole32 para corrigir um erro que surgiu após o citou um foi resolvido.

Os compila código ... Agora, para ver se eu posso fazê-lo fazer o que eu preciso.

Outras dicas

O vinculador está reclamando que ele não sabe onde IID_IShellLinkA está definida. Você tem a declaração em um cabeçalho, mas provavelmente você está faltando uma biblioteca. Eu acho que é definido no libuuid , de modo que incluem em seu ligando comando com -luuid. O ligador é provavelmente configurado para incluir um certo conjunto de bibliotecas automaticamente, incluindo kernel32 e user32, mas uuid só pode não estar na lista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top