質問

.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>

ie、すべての前に#define INITGUIDを追加し、#include <initguid.h>

を含めます

これがなぜ機能するのかわかりません。

また、-lole32を追加して、引用されたエラーが解決された後に発生したエラーを修正する必要がありました。

コードがコンパイルされます...今、必要なことを実行できるかどうかを確認します。

他のヒント

リンカーは、IID_IShellLinkAがどこで定義されているかわからないという不満を言っています。ヘッダーに宣言がありますが、おそらくライブラリがありません。 libuuid で定義されていると思うので、リンクコマンドに-luuidを含めてください。リンカーは、kernel32やuser32など、特定のライブラリセットを自動的に含めるように構成されている可能性がありますが、uuidはそのリストに含まれていない可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top