Винер компоновщик ошибка: пытается создать .lnk - PullRequest
2 голосов
/ 04 марта 2009

Я пытаюсь создать файл .lnk программно. Я бы предпочел использовать C, но C ++ - это хорошо (и это то, чем занимается весь материал MSDN).

Соответствующий пример кода:

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

Я пытаюсь дополнить wineg ++, используя:

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

И я получаю следующие ошибки:

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 марта 2009

Решение, по-видимому, состоит в том, чтобы изменить раздел включений на:

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

т.е. добавьте #define INITGUID перед всем и включите #include <initguid.h>

Понятия не имею, почему это работает.

Мне также пришлось добавить -lole32, чтобы исправить ошибку, возникшую после того, как процитированная была устранена.

Код компилируется ... теперь, чтобы посмотреть, смогу ли я заставить его делать то, что мне нужно.

1 голос
/ 04 марта 2009

Компоновщик жалуется, что не знает, где определено IID_IShellLinkA. У вас есть объявление в заголовке, но вам, вероятно, не хватает библиотеки. Я думаю, что он определен в libuuid , поэтому включите его в команду компоновки с -luuid. Компоновщик, вероятно, настроен на автоматическое включение определенного набора библиотек, включая kernel32 и user32, но в этом списке может просто не быть uuid.

...