使用環境は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.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 が未解決です。
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.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"が必要と。
また一つ勉強になりました、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- 英語 和訳 3 2022/06/22 17:29
- 英語 do everything you wantとは 3 2023/06/18 22:40
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
popen・pcloseについて
-
外部シンボルの未解決のエラー
-
外部依存関係について
-
LNK2019: 外部シンボル どのよ...
-
gdiplusのリンクエラー
-
C++で、外部シンボル・外部参...
-
DLL呼び出しAPのリンクエラーに...
-
「外部参照 1 が未解決です。」...
-
「猫でもわかるwindowsプログ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
戻り値について
-
適切な変換関数が存在しない???
-
res://ieframe.dll/について
-
C# リソースに埋め込んだ.exeフ...
-
C言語をコンパイルするとコンピ...
-
cc と gcc の違い
-
エラー: ‘inval’ の記憶サイズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部依存関係について
-
LNK2019: 外部シンボル どのよ...
-
C++でのエラー LNK2001
-
外部シンボルの未解決のエラー
-
error LNK2001について
-
外部シンボル" ~~"は未解決で...
-
コンパイルエラー
-
OpenCVでの画像サイズ取得につ...
-
LNK2019: 未解決の外部シンボル...
-
エラー 未解決の外部シンボル
-
LNK2001(Pro*c)
-
実行ファイルの容量を減らした...
-
popen・pcloseについて
-
PathIsDirectoryを使って
-
DB2付きのC言語がコンパイルで...
-
C++ の LNK2001エラー
-
CLapack C++
-
外部シンボルについて
-
未解決の外部シンボル
-
VC++ 6.0へのサンプルプログラ...
おすすめ情報