
使用環境はVisualStudio2008、WindowsXPです。
http://www.voidtools.com/Everything-SDK.zip
こちらのSDKに添付されているdllを呼び出したいと思います。
dll、lib、ヘッダーファイルをプロジェクトと同じフォルダに入れて以下のようなコードを書いてみたのですが、リンカエラーになりました。
#pragma comment(lib, "everything.lib")
void __stdcall Everything_SetSearch(LPCTSTR lpString);
void main(void){
Everything_SetSearch(L"ああ");
}
ビルドエラーの内容
error LNK2019: 未解決の外部シンボル "void __stdcall Everything_SetSearch(wchar_t const *)" (?Everything_SetSearch@@YGXPB_W@Z) が関数 _main で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
何か初歩的なミスをしている気もしますが、突っ込みなどなど回答の方よろしくお願いします。
No.4ベストアンサー
- 回答日時:
Everything.libの内容をみると、該当の関数は次のようになっています。
※ dumpbin /EXPORTS Everything.lib で確認できます(それぞれPath必要)
_Everything_SetSearchA@4
_Everything_SetSearchW@4
質問者さんのリンクのエラーを見ると、これら関数が次のような名称でなければ一致しないことになります。
?Everything_SetSearch@@YGXPB_W@Z
この違いに対してextern "C"を用いて関数名を調整します。
http://www.geocities.jp/ky_webid/cpp/language/03 …
質問者さんが、
void __stdcall Everything_SetSearch(LPCTSTR lpString);
と記載しているところを
extern "C"{
#include "Everything.h"
}
に変更します。
これで解決するのではないでしょうか。
仰る通りにしたら無事に実行できました。
なるほどオーバーロードがあるC++では、名前が被らないように文字列が付け足されるんですか。
だからextern "C"が必要と。
また一つ勉強になりました、ありがとうございます。
No.3
- 回答日時:
普通にビルド出来たけど…
#include "stdafx.h"
extern "C" {
#include "Everything.h"
}
#pragma comment(lib, "everything.lib")
int _tmain(int argc, _TCHAR* argv[])
{
Everything_SetSearch(_T("ああ"));
return 0;
}
No.1
- 回答日時:
解決しましたでしょうか・・・・・・・。
なんでだろ?と思ってちょっとそのライブラリ見てみました。ほんとにそのソースでコンパイルしているとしたら、まずは include ファイルの中身眺めてみるといいとおもいます・・・・・・。いろいろ気がついてくれれば・・・・・と思い、スミマセン。
この回答への補足
ちなみに宣言部分を以下のようにしてみましたがリンカエラーは変わりませんでした。
__declspec(dllimport) void __stdcall Everything_SetSearchW(LPCWSTR lpString);
また、最初はヘッダーファイルをincludeしていたのですが
#pragma comment(lib, "everything.lib")
#include "Everything.h"
void main(void){
Everything_SetSearch(L"ああ");
}
error LNK2019: 未解決の外部シンボル "__declspec(dllimport) void __stdcall Everything_SetSearchW(wchar_t const *)" (__imp_?Everything_SetSearchW@@YGXPB_W@Z) が関数 _main で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のエラー LNK1120: 外部参照
-
LNK2019: 未解決の外部シンボル...
-
外部シンボル" ~~"は未解決で...
-
外部依存関係について
-
C++の関数をfortranから呼びた...
-
エラー 未解決の外部シンボル
-
外部シンボルについて
-
LNK2019: 外部シンボル どのよ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
Visual studio2017で、2回目の...
-
アプリケーションのDLLファイル...
-
” OS ビルド ” の意味が分か...
-
VC++6の「プロセスへアタッチ」...
-
eclipseでデバックするとエラー...
-
Excelのエラーで困ってます。
-
DLL参照時に指定されたモジュー...
-
ビルド時のエラー(書き込みで...
-
visual C++ でビルドの中止がで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部依存関係について
-
外部シンボル" ~~"は未解決で...
-
未解決の外部シンボル
-
LNK2019: 外部シンボル どのよ...
-
C++/CLIでfstream(.NET 3.5)
-
C言語のエラー LNK1120: 外部参照
-
パブリックシンボルとは?
-
プロセスIDの取得の方法。
-
popen・pcloseについて
-
LNK2019: 未解決の外部シンボル...
-
このプログラムを動かしたいの...
-
VC++/MFCで error LNK2001
-
C++のエラーの内容について
-
コンパイルエラー
-
外部シンボルの未解決のエラー
-
PathIsDirectoryを使って
-
open dynamics engine の導入
-
ビルドエラー
-
C言語ソースのオラクルコンパイ...
-
外部シンボル未解決 LNK2001
おすすめ情報