トップ回答者
外部シンボル未解決(IID_IPersistFile,IID_IShellLinkW,CLSID_ShellLink)

質問
-
あるコードをVisual C++ 2010 Expressでビルドしたところ、以下のLNK2020,LNK2001エラーが発生します。
1>hogehoge.obj : error LNK2020: 未解決のトークン (0A000018) IID_IPersistFile
1>hogehoge.obj : error LNK2020: 未解決のトークン (0A00001B) CLSID_ShellLink
1>hogehoge.obj : error LNK2020: 未解決のトークン (0A00001C) IID_IShellLinkW
1>hogehoge.obj : error LNK2001: 外部シンボル "IID_IPersistFile" は未解決です。
1>hogehoge.obj : error LNK2001: 外部シンボル "IID_IShellLinkW" は未解決です。
1>hogehoge.obj : error LNK2001: 外部シンボル "CLSID_ShellLink" は未解決です。ビルドしたコードは以下の通りです。
----------
hRes = ::CoInitialize(NULL);
if (SUCCEEDED(hRes))
{
hRes = ::CoCreateInstance(CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(LPVOID *)&pisl);
if (SUCCEEDED(hRes))
{
pisl->SetPath((LPCTSTR)szwSrcPath);
hRes = pisl->QueryInterface(IID_IPersistFile, (LPVOID *)&ppf);
if (SUCCEEDED(hRes))
{
hRes = ppf->Save((LPCTSTR)szwShortcutPath, TRUE);
ppf->Release();
}
pisl->Release();
}
::CoUninitialize();
}----------
stdafx.h内で、
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "shlwapi.lib")
#pragma comment(lib, "uuid.lib")はしているのですが、何が悪いのでしょうか?
ご教授いただけますよう、お願いいたします。
回答
-
bonito1111さん、こんにちは。
#include <vcclr.h>がありますね。
ひょっとして、プロジェクトのプロパティの「共通言語ランタイムサポート」を「純粋MSIL共通言語ランタイムサポート(/clr:pure)」にしていませんか?もしそうなっていたら、「共通言語ランタイムサポート(/clr)」にしてみてください。
変更方法は、プロジェクトのプロパティから、構成プロパティ→全般→「共通言語ランタイムサポート」です。
clr/pureですと、ネイティブの実行可能コードが含まれないために、リンクエラーが発生していると思います。
すべての返信
-
bonito1111さん、こんにちは。
#includeを追加して下さい。
#include <shobjidl.h>
#include <shlguid.h>ショーットカット(ShellLink)の説明が書かれています。
Using Shell Links
の部分に#includeの記載例がありますので、ご確認下さい。
-
にゃにゃおさま
ご返信ありがとうございました。
ご指摘のinclude文は以下のようになっておりますが、依然としてリンクエラーが出ている状態です。
従いましてご指摘いただいたinclude文は記述してあるのですがダメなのです。
何か分かることがあれはアドバイスいただければ幸いです。
--- stdafx.h ---
#pragma once
#include <Windows.h>
#include <WinNls.h>
#include <ShObjIdl.h>
#include <ObjBase.h>
#include <ObjIdl.h>
#include <ShlGuid.h>
#include <Shlwapi.h>
#include <ShlObj.h>
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "shlwapi.lib")
#pragma comment(lib, "uuid.lib")
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
#include <malloc.h>
#include <ctype.h>
#include <vcclr.h>
#include <math.h> -
bonito1111さん、こんにちは。
#include <vcclr.h>がありますね。
ひょっとして、プロジェクトのプロパティの「共通言語ランタイムサポート」を「純粋MSIL共通言語ランタイムサポート(/clr:pure)」にしていませんか?もしそうなっていたら、「共通言語ランタイムサポート(/clr)」にしてみてください。
変更方法は、プロジェクトのプロパティから、構成プロパティ→全般→「共通言語ランタイムサポート」です。
clr/pureですと、ネイティブの実行可能コードが含まれないために、リンクエラーが発生していると思います。