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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

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

#1

投稿記事 by purin52002 » 6年前

こんにちは

今回は自作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が見つからないためコードの実行を続行できません」
というエラーメッセージが出てしまいます。

対処法がわかる方おりましたら教えてください<(_ _)>
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

Gonbeishi

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

#2

投稿記事 by Gonbeishi » 6年前

コード:

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

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

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

#3

投稿記事 by purin52002 » 6年前

Gonbeishiさん

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

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

引き続きよろしくお願いします<(_ _)>
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

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

#4

投稿記事 by purin52002 » 6年前

いろいろ調べた結果、プロジェクトファイルと同じディレクトリ(今回だとMain)にdllがあるとエラーなく動くようです。

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

お願いします<(_ _)>
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#5

投稿記事 by ISLe » 6年前

Solutionソリューションに、MainプロジェクトとMakeプロジェクトの両方が含まれているとします。

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

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

Bull
記事: 149
登録日時: 9年前

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

#6

投稿記事 by Bull » 6年前

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

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

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

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

アバター
usao
記事: 1887
登録日時: 11年前

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

#7

投稿記事 by usao » 6年前

プロジェクトのプロパティの「デバッグ」のページの「環境」に
path = bin/Debugのフルパス
とか書いて
dllの生成される場所のパスを通すとか.

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

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

#8

投稿記事 by purin52002 » 6年前

ISLeさん

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

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

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

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

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

回答してくださった皆様、ありがとうございました^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

返信

“C言語何でも質問掲示板” へ戻る