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.1
- 回答日時:
>作ったプログラムを動かすと、自作したDLL「Dll1.dll」が
>みつからないようです。
勉強/実験ってことならDLLファイルの場所はフルパスで指定したらどうでしょうか?
一応、LoadLibrary()でカレントディレクトリも探すとは思いますが……。
「exeと同じディレクトリに置く」という場合でも、カレントディレクトリからではなく
実行ファイルのフルパス名を取得してから文字列操作でフルパス指定にした方がよろしいかと。
# カレントディレクトリについては操作によって意図しないまま変わっている場合がありますので。
またまたありがとうございます。
フルパスで書いてみたのですが、状況変わらずです。
フルパスで書くのはソースでよかったですか?
プロパティなど変える必要があるのでしょうか。
または、自作のDLLがよくないとか?(かなり簡単なものですし、
まだ関数を読んでいないですよね)
No.2
- 回答日時:
>フルパスで書くのはソースでよかったですか?
LoadLibrary()で指定しているファイル名…ですね。
# 言うまでもないことですが、パス区切りの円マークはエスケープして下さいね。
# '/'にしておく…という手もありますけど。
>プロパティなど変える必要があるのでしょうか。
については……
>Dll1.dllはソリューションエクスプローラで表示されていましたが、赤いマーク(警告?)
>がついていたので、「プロパティを開いてプロジェクトに含まれる」項目をFalseからTrueに
>変えたところ、赤いマークが消えました。
というのが状況不明ですのでなんとも…。
該当プロジェクトにDLLを追加…とかそういう操作は不要かと思われますけど。
# C#などで利用する…とかだと必要かも知れません。C++/CLIでも必要なんでしょうかねぇ……。
再度、ありがとうございます。
フルパスで \\も/も使ってみましたが、ダメでした。
調べたところ、文字列のキャストが関係ありそうでした。
それだけが原因ではないかもしれませんが
文字列のキャストについてもう少し勉強してみます。
赤いマーク云々は、イチから作り直したところ
ソリューションエクスプローラから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.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が使えないと困るのですが。
とにかくお付き合いくださり、大変感謝いたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- その他(OS) OBSが起動できません 3 2022/03/30 12:21
- その他(コンピューター・テクノロジー) パソ粥が壊れてしまい。 新しく買ったパソコンに Amplitued5 Max をダウンロードインスト 1 2022/05/22 00:33
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- その他(ソフトウェア) MMD PMXエディタ プラグイン 押せない はじめまして。MMDについて質問させていただきます。 7 2022/05/04 15:53
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Java 動かなくなったのでJavaソースを手直しお願いします。 2 2022/04/30 05:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドラインで商用利用可能...
-
res://ieframe.dll/について
-
VBにてIMEの入力モードを変える...
-
ウインドウズxpの「ファイルを...
-
lame_enc.dllの外部関数について
-
dllをいじる。。
-
ボーランドC++でのDLL作成トラブル
-
kernel32.dllとshell32.dllが書...
-
実行ファイルからソースファイ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
VBAを何回も作り直して、容量が...
-
C2146を回避するにはどうしたら...
-
unsigned long long 型のフォー...
-
C言語の規格
-
C言語をコンパイルするとコンピ...
-
win32api構造体引数の型指定に...
-
64ビットのlinuxで32ビットメモ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASP.NETのDLL入れ替えについて
-
visual studioの不要なDll削除方法
-
VB6.0(SP6)にて開発を行なって...
-
C# DLL エントリ ポイントが...
-
res://ieframe.dll/について
-
ファイルをvbaで圧縮したいので...
-
M365にアップデートしてからコ...
-
VBにてIMEの入力モードを変える...
-
WIN10で常にフォームを手前に
-
指定された引数が有効範囲にな...
-
VBAエディタのコード画面で、カ...
-
user32.dllがないためアプリが...
-
Excel2007のVBAで、セル範囲を...
-
VBからIMEパッドを呼び出す方法...
-
ボーランドC++でのDLL作成トラブル
-
VB.NET xdoc2txtをつかってPDF...
-
about:blankの削除したいのです...
-
shell32.dll のアイコンを使っ...
-
dllをいじる。。
-
USB機器のCプログラミングについて
おすすめ情報