VisualC++で,あるソフトのSDKを組み込むだけで1週間かかった時の結論

結論:64bit版では64bitプラットフォームの設定も必要

先日,諸事情によりC++用のSDKを頂いて開発中のソフトに組み込むことになってました.
構成は,
include/hoge.h
lib/x64/hoge.lib
lib/x86/hoge.lib
redist/x64/hoge.dll
redist/x86/hoge.dll
つまるところ,.hと.libと.dllのファイルを全部パスを通して呼んでやればいいだろうという感じ.
しかしそれだけのためにずいぶん苦労したのでメモしておきます.

MSDNのページやなんかを参考にしながら作業をしました.
チュートリアル : ダイナミック リンク ライブラリ (DLL: Dynamic Link Library) の作成と使用

1.新しいWin32コンソールアプリケーションを作成
コンソールアプリケーションとして作成.プリコンパイルヘッダは使用しない.

2.プロジェクトのプロパティ→構成プロパティを設定
VC++ディレクトリのインクルードディレクトリにhoge.hのパス,ライブラリディレクトリにx64版のhoge.libのパスを設定.
リンカー→追加の依存ファイルにhoge.libを追加.

3.システム環境変数のpathに,x64版hoge.dllのパスを追加

これで全部見えてるだろうと思ったんですが,どうにも動かない.
「未解決の外部シンボル~」というエラーが出ているので,どうもDLLが見えてない.
カレントにDLLを持ってきたりいろいろした結果,DLLを読み込むときに出たメッセージが
「%1 は有効なWin32アプリケーションではありません」
(ん??x64版のlibとdllを呼んでいるはずなのに??)
と,ここでやっと気づきました.デフォルトは32bitアプリケーションを作る設定になってるから直さなくちゃいけない.

方法 : Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定する

4.プロジェクトのプロパティ→構成プロパティ→構成マネージャで,新規作成でプラットフォームをx64を選択してOK

これでSDKの関数が呼べるようになりました.
ずいぶん遠回りしたな...

投稿者:

ytoki

技術系の話題に雑食な院生は15年からエンジニアをやっています。 /Rails/Android/MATLAB/Ruby/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です