문제

프로그래밍 방식으로 .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

어떤 아이디어?

도움이 되었습니까?

해결책

솔루션은 포함 섹션을 다음과 같이 변경하는 것 같습니다.

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

즉, 추가 #define INITGUID 모든 전에 그리고 포함 #include <initguid.h>

왜 이것이 작동하는지 모르겠습니다.

또한 인용 된 사람이 해결 된 후 발생한 오류를 수정하기 위해 -lole32를 추가해야했습니다.

코드가 컴파일됩니다 ... 이제 필요한 것을 할 수 있는지 확인합니다.

다른 팁

링커는 어디에 있는지 알지 못한다고 불평합니다 IID_IShellLinkA 정의됩니다. 헤더에 선언이 있지만 도서관이 없을 것입니다. 나는 그것이 정의되었다고 생각합니다 libuuid, 링크 명령에 포함 시키십시오 -luuid. 링커는 아마도 Kernel32 및 User32를 포함하여 특정 라이브러리 세트를 자동으로 포함하도록 구성되어 있지만 UUID는 해당 목록에 있지 않을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top