
DLLが見つからない
VisualC++でDLLを明示的に読み出す学習をしています。
作ったプログラムを動かすと、自作したDLL「Dll1.dll」が
みつからないようです。
以下でret=126です。
SetLastError(0);
hMyLib = LoadLibrary(LPCWSTR("Dll1.dll"));
if (hMyLib==NULL))
int ret = GetLastError();
Dll1.dllは、.exeと.slnと同じ場所におきました。
Dll1.dllはソリューションエクスプローラで表示されていましたが、赤いマーク(警告?)
がついていたので、「プロパティを開いてプロジェクトに含まれる」項目をFalseからTrueに
変えたところ、赤いマークが消えました。
さらに、何を設定しなおせばよいのでしょうか?
No.4ベストアンサー
- 回答日時:
>エラーが4250に変わりました。
>(4250:このアプリケーションはアプリコンテキストでのみ実行できます)
https://www.reddit.com/r/learnprogramming/commen …
検索したらこんなのとか。
英語だけど……。
Dll1.dllの中身による…んでしょうかね。
上のURLのだと…Dllの中身はなんぞのクラスのようですが。
# C++のクラスをDLLとしてエクスポートできるのかは…私自身はやったことがないので不明です。
>これは一歩進んだということなのでしょうか?
「ファイルが見つからない」よりは進んだものと思われます。
>また、Dll1.dllは自分で作ったものですが、とあるアプリで提供しているDll2.dll
>にしたら、やはり126のままです。Dll1.dllでできたら、Dll2.dllを利用するフェーズに
>進みたいのですが。
こちらは不明。
本当にいろいろありがとうございました。
気を取り直して、試しにもう少しまともと思えるDll3.dllをロードしたところ
エラーがなくなっていました。
ということは、今まで試していたDllがよくなかったと考えられます。
Dll2.dllが使えないと困るのですが。
とにかくお付き合いくださり、大変感謝いたします。
No.3
- 回答日時:
>調べたところ、文字列のキャストが関係ありそうでした。
ええっと……
>LoadLibrary(LPCWSTR("Dll1.dll"));
の書き方は確かに変ですね…。
コンパイラの設定での文字セットの変更に対応したいのであれば、
_T("Dll1.dll")
とか
_TEXT("Dll1.dll")
とかでよいのではないでしょうか?
https://msdn.microsoft.com/ja-jp/library/windows …
_TEXTではなくTEXT()か?
長くお付き合いいただき、大変感謝です。
文字セットについては私には難しいのですが、
とりあえず、プロパティの文字セットをマルチに変更し、_T(Dll1.dll")としてみたら、
エラーが4250に変わりました。
(4250:このアプリケーションはアプリコンテキストでのみ実行できます)
これは一歩進んだということなのでしょうか?
また、Dll1.dllは自分で作ったものですが、とあるアプリで提供しているDll2.dll
にしたら、やはり126のままです。Dll1.dllでできたら、Dll2.dllを利用するフェーズに
進みたいのですが。
No.2
- 回答日時:
>フルパスで書くのはソースでよかったですか?
LoadLibrary()で指定しているファイル名…ですね。
# 言うまでもないことですが、パス区切りの円マークはエスケープして下さいね。
# '/'にしておく…という手もありますけど。
>プロパティなど変える必要があるのでしょうか。
については……
>Dll1.dllはソリューションエクスプローラで表示されていましたが、赤いマーク(警告?)
>がついていたので、「プロパティを開いてプロジェクトに含まれる」項目をFalseからTrueに
>変えたところ、赤いマークが消えました。
というのが状況不明ですのでなんとも…。
該当プロジェクトにDLLを追加…とかそういう操作は不要かと思われますけど。
# C#などで利用する…とかだと必要かも知れません。C++/CLIでも必要なんでしょうかねぇ……。
再度、ありがとうございます。
フルパスで \\も/も使ってみましたが、ダメでした。
調べたところ、文字列のキャストが関係ありそうでした。
それだけが原因ではないかもしれませんが
文字列のキャストについてもう少し勉強してみます。
赤いマーク云々は、イチから作り直したところ
ソリューションエクスプローラからDLLが消えてしまったので
なかったことにします。いろいろいじりすぎて変なことをしたせいかもしれません。
もうしばらく締め切らないので、何かヒントがあったら教えてください。
No.1
- 回答日時:
>作ったプログラムを動かすと、自作したDLL「Dll1.dll」が
>みつからないようです。
勉強/実験ってことならDLLファイルの場所はフルパスで指定したらどうでしょうか?
一応、LoadLibrary()でカレントディレクトリも探すとは思いますが……。
「exeと同じディレクトリに置く」という場合でも、カレントディレクトリからではなく
実行ファイルのフルパス名を取得してから文字列操作でフルパス指定にした方がよろしいかと。
# カレントディレクトリについては操作によって意図しないまま変わっている場合がありますので。
またまたありがとうございます。
フルパスで書いてみたのですが、状況変わらずです。
フルパスで書くのはソースでよかったですか?
プロパティなど変える必要があるのでしょうか。
または、自作のDLLがよくないとか?(かなり簡単なものですし、
まだ関数を読んでいないですよね)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*.exeと異なるフォルダのDLLを...
-
メイクファイルからdllを生成す...
-
VB6.0(SP6)にて開発を行なって...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
math.hに含まれる関数が使えない
-
アプリケーションのDLLファイル...
-
DLLファイルの逆コンパイラにつ...
-
printfなど、標準関数のソース...
-
visual studio2019でデバッグが...
-
Visual studio2017で、2回目の...
-
C言語でヘッダファイルにグロー...
-
キーの自動入力
-
ソリューションをまたがるデバ...
-
visual studio 2008 のデバッグ...
-
Excelのエラーで困ってます。
-
C#で char型とstring型の比較で...
-
適切な変換関数が存在しない???
-
Visual Studio 2010 のC#で…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0(SP6)にて開発を行なって...
-
ASP.NETのDLL入れ替えについて
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
res://ieframe.dll/について
-
C# DLL エントリ ポイントが...
-
C++のdllの作り方を教えてく...
-
VC++6.0 でのライブラリ参照方法
-
ファイルをvbaで圧縮したいので...
-
vb6で作成した画面が処理に時間...
-
指定された引数が有効範囲にな...
-
VBAエディタのコード画面で、カ...
-
ptipi.dll に関し未解決問題
-
[マインクラフト] Javaが64bit...
-
VB.NET xdoc2txtをつかってPDF...
-
M365にアップデートしてからコ...
-
プロシージャエントリポイント ...
-
WIN10で常にフォームを手前に
-
エクセル マクロで指定フォルダ...
-
メイクファイルからdllを生成す...
おすすめ情報