ページ 11

[c++]自作dllの読み込み方

Posted: 2017年12月10日(日) 15:12
by purin52002
こんにちは

今回は自作dllの読み込み時のエラーについて質問があります。
開発環境はvs2017です。

コード:


Solution
│  
├─bin
│  ┗─Debug
│  
├─Main
└─Make
 
このようなディレクトリ構造で
  1. Makeディレクトリのプロジェクトでdllを作る
  2. bin/Debugディレクトリにdllを出力する
  3. Mainディレクトリのプロジェクトでbin/Debugディレクトリのdllを参照する
というようなことがしたいです

おそらく2番まではうまくいっています。
  • dll用のヘッダを DLL.h とする
  • dllの名前を MyDLL とする
  • dllでexportする関数を Func() とする
  • 追加のインクルードディレクトリに DLL.h のパスを設定
  • 追加のライブラリディレクトリに bin/Debug のパスを設定
  • 構成はDebug
以上のような条件で以下のコードを書きました。

コード:

#include<DLL.h>

#pragma comment(lib,"MyDLL.lib")

int main()
{
    //Func();
}
このコードは動くのですが、Func()のコメントを外すと
「MyDLL.dllが見つからないためコードの実行を続行できません」
というエラーメッセージが出てしまいます。

対処法がわかる方おりましたら教えてください<(_ _)>

Re: [c++]自作dllの読み込み方

Posted: 2017年12月10日(日) 17:02
by Gonbeishi

コード:

#pragma comment(lib,"MyDLL.lib")
①ドライブ名からの絶対パスで指定する。("c://folder1/folder2/・・・/MyDLL.lib")
②相対パスで指定する。("../bin/Debug/MyDLL.lib" かな?)
③統合開発環境のGUIから設定でも大丈夫そう。

Re: [c++]自作dllの読み込み方

Posted: 2017年12月11日(月) 01:16
by purin52002
Gonbeishiさん

回答ありがとうございます。

①番については試していませんが、②番ではやはり実行時にエラーが出てしまいました。
③番はvisualstudioで「追加のライブラリディレクトリ」にディレクトリのパスを設定しています。
こちらも実行時にエラーが出てしまいます。

引き続きよろしくお願いします<(_ _)>

Re: [c++]自作dllの読み込み方

Posted: 2017年12月11日(月) 01:44
by purin52002
いろいろ調べた結果、プロジェクトファイルと同じディレクトリ(今回だとMain)にdllがあるとエラーなく動くようです。

できることならbin/Debugのdllを読み込みたいのですが何か方法はないでしょうか?
それともプロジェクトファイルと同じディレクトリにdllを出力するのが正しい方法なのでしょうか?

お願いします<(_ _)>

Re: [c++]自作dllの読み込み方

Posted: 2017年12月11日(月) 06:59
by ISLe
Solutionソリューションに、MainプロジェクトとMakeプロジェクトの両方が含まれているとします。

1. Mainプロジェクトの『プロジェクト』→『プロパティ』で『追加のインクルードディレクトリ』に DLL.h のパスを設定
2. Mainプロジェクトの『プロジェクト』→『参照の追加...』でMakeプロジェクトにチェック

以上でOKです。
この方法ではリンカの設定(#pragma comment(lib, "~")のソース記述含む)を手動で行う必要がありません。
Debug構成でもRelease構成でも自動で追従します。

Re: [c++]自作dllの読み込み方

Posted: 2017年12月11日(月) 08:22
by Bull
purin52002 さんが書きました:いろいろ調べた結果、プロジェクトファイルと同じディレクトリ(今回だとMain)にdllがあるとエラーなく動くようです。

できることならbin/Debugのdllを読み込みたいのですが何か方法はないでしょうか?
それともプロジェクトファイルと同じディレクトリにdllを出力するのが正しい方法なのでしょうか?
一応確認ですが、ビルドは正常に終了して、実行時にエラーが出るのですよね?
でしたら EXE と DLL の位置が問題なのではないかと思います。
要するに DLL を見つけられない状態ですね。

プロジェクトファイルというのがなんなのかわかりませんが、ソースファイルやライブラリーは実行時には関係ありません。EXE と DLL がどこにあるのが問題になります。動作確認/デバッグ中は EXE と DLL は同じフォルダーに置くのが一番手軽だと思います。

DLL の検索パスについては以下を参考にして下さい。
Windows が使用する DLL 検索パス

Re: [c++]自作dllの読み込み方

Posted: 2017年12月11日(月) 11:19
by usao
プロジェクトのプロパティの「デバッグ」のページの「環境」に
path = bin/Debugのフルパス
とか書いて
dllの生成される場所のパスを通すとか.

Re: [c++]自作dllの読み込み方

Posted: 2017年12月11日(月) 11:42
by purin52002
ISLeさん

ありがとうございます。
ISLeさんの手順通りに設定したところエラーなく動くことを確認できました^^
プロジェクトの依存関係を設定しただけで満足しちゃっていました^^;
今後はこの方法を使っていきたいと思います。
[hr]
Bullさん

回答ありがとうございます。
今後visualstudio以外で開発することがあった場合にはexeファイルとdllファイルは同じところにおいてテストしようと思います^^
[hr]
usaoさん

ありがとうございます。
こちらの方法も試してみたところエラーなく動くことを確認できました^^
[hr]
解決方法

環境:visualstudio2017
状況:ソリューション「Sln」にexe出力プロジェクト「Main」とdll出力プロジェクト「Make」が含まれている

方法:「Main」->「プロジェクト」->「参照の追加」で「Make」にチェックを入れる
(プロジェクトの依存は自動で設定してくれるっぽい?)

回答してくださった皆様、ありがとうございました^^