
C++プロジェクト(Windowsフォームアプリ)を作成し、あるサイトで公開されているDLLを実装し→コンパイル→デバッグ実行させた所、問題なく動作が確認できたのですが、
クラスライブラリで作成したC++新規プロジェクトに同じくDLLを実装し、同一ソリューション内にC#又はC++でWindowsフォームアプリを作成し、先に作成したクラスライブラリプロジェクトを参照させる形態で作成した際に、コンパイル→デバッグ実行させた所、コンパイルは通ったのですがデバッグ実行時に、DLLを参照しようとしたタイミングで
「DLL参照時に指定されたモジュールが見つかりません。(HRESULT からの例外 0x8007007E) が発生してしまう。」
というエラーが発生してしまいました。
何故Windowsフォームアプリ単体時にはDLLが参照できたのに、クラスライブラリにし複数プロジェクトにして実行するとエラーが発生してしまうのか、どなたか原因、解法等 心得ておられましたら御指南のほど宜しくお願いします。
以下 事象詳細です。
開発環境:Microsoft Visual Studio 2008
公開DLL:USB-IOを制御する目的のUSBIODLLDemo.dllというDLLです。
<成功時>
1.C++プロジェクト(Windowsフォームアプリ)新規作成
2.DLLがインストールされているフォルダから.dllファイル, .hファイル、.libファイルをコピーしプロジェクト新規作成したフォルダにコピーする
3.プロジェクトのプロパティ→構成プロパティ→リンカ→入力→追加の依存ファイル に.libファイル名を記入
4.ダウンロードの.hファイルから
__declspec(dllimport) BYTE __stdcall GetNo(void);
__declspec(dllimport) void __stdcall P1Write(BYTE newVal);
__declspec(dllimport) BYTE __stdcall P1WriteBit(BYTE Bit, BOOL Tf01);
__declspec(dllimport) BYTE __stdcall P1Read(void);
をコピーしstdafx.h へ貼付け。
5.stdafx.hへ貼り付けた宣言がこのままではコンパイルが通らなかったため
#define BYTE unsigned char
#define BOOL bool
を追記。
6.ダウンロードしたDLLの関数を使用した一文を実装
7.コンパイル→デバッグ実行→ 無事実行完了!
<エラー発生時> *下記事象ではC#Winフォームアプリを挙げていますがC++Winフォームアプリで試しても同じ結果になりました。
1.C++プロジェクト(クラスライブラリ)新規作成
2.DLLがインストールされているフォルダから.dllファイル, .hファイル、.libファイルをコピーしプロジェクト新規作成したフォルダにコピーする
3.プロジェクトのプロパティ→構成プロパティ→リンカ→入力→追加の依存ファイル に.libファイル名を記入
4.ダウンロードの.hファイルから
__declspec(dllimport) BYTE __stdcall GetNo(void);
__declspec(dllimport) void __stdcall P1Write(BYTE newVal);
__declspec(dllimport) BYTE __stdcall P1WriteBit(BYTE Bit, BOOL Tf01);
__declspec(dllimport) BYTE __stdcall P1Read(void);
をコピーしStdafx.h へ貼付け。
5.Stdafx.hへ貼り付けた宣言がこのままではコンパイルが通らなかったため
#define BYTE unsigned char
#define BOOL bool
を追記。
6.ダウンロードしたDLLの関数を使用した一文を実装(公開関数として)
7.C#プロジェクト(Windowsフォームアプリ)新規追加 *C++(Windowsフォームアプリ)でやっても同じ結果になりました。
8.新しい参照の追加で上のクラスライブラリプロジェクトを追加
9.フォームアプリ側でクラスライブラリプロジェクトの関数を実行する処理を実装
clsTest ctst;
ctst.Exec();
10.コンパイル→デバッグ実行→DLLを参照しようとしたタイミングでエラー発生!
「DLL参照時に指定されたモジュールが見つかりません。(HRESULT からの例外 0x8007007E) が発生してしまう。」
*クラスライブラリ側の、DLLの関数を呼んでいる部分をコメントアウトするとエラー無く実行できてしまいます。
No.1ベストアンサー
- 回答日時:
やるならば ソリューション名をつけて複数のプロジェクトをまとめたほうがいいように思います
VC++/C#で新規にプロジェクト(ソリューション)を生成する際のダイアログの『ソリューションのディレクトリを作成』にチェックを入れて
『USBIODEMO』などといった具合にします
その中に.NET用のクラスライブラリのプロジェクトを作成します
こうすると
USBIODEMO\Debug(または Release)に出来上がったDLLが生成されます
同じように テスト用のFormアプリをVCのプロジェクトで作成します
コンパイル/リンクがうまくいけば 上記のフォルダに EXEが生成されます
この状態でFormEXEのデバッグを行ってやれば 質問のようなエラーは回避できると思います
C#の場合は 元の『USBIODLLDemo.dll』をC#のプロジェクトの『bin\debug(またはRelease)』にコピーしないといけないでしょう
つまりは クラスライブラリのDLLは見つかったが 元の『USBIODLLDemo.dll』が見つからなかった
という現象ではないかと思います
アプリの参照はクラスライブラリーまでなのでクラスライブのDLLまではコピーしたりする面倒を見てくれます
クラスライブラリが参照しているDLLまで面倒見てくれないためなのかもしれません
DLLの検索順についてWebなどで検索してみましょう
丁寧な御指南ありがとうございました。
事象を詳細に説明して頂いた事で非常に参考になりました。
お陰様でC++Winフォームのケース、C#Winフォームのケース共に解決致しました。
<↓解決詳細です↓>
・C++winフォームの場合、USBIODLLDemo.dllをソリューションの階層のDebugフォルダに追加する事で解決致しました。
・C#winフォームの場合、御指南頂きました通り USBIODLLDemo.dll をC#プロジェクトのbin\Debugに追加する事で解決致しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
このQ&Aを見た人はこんなQ&Aも見ています
-
意味不明の実行時エラーで困っています
その他(プログラミング・Web制作)
-
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
VB.NETでDLLを読み込ませる時にエラーがでる
Visual Basic(VBA)
-
-
4
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
5
API関数(DLL)の呼び出しにおいて、DLLの格納場所は?
Visual Basic(VBA)
-
6
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
7
アクセスできない保護レベルエラーが発生します
Visual Basic(VBA)
-
8
C#ソースをCSCファイルにてコンパイル時,アセンブリ参照不足について 当方,C#を勉強中のものです
C言語・C++・C#
-
9
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
10
スタティックリンクライブラリで2重リンクできる?
C言語・C++・C#
-
11
【VB】【エクセル操作】 SaveAsでエラーが出てしまいます。
Visual Basic(VBA)
-
12
外部シンボル ~~"は未解決ですというエラーが直らない"
C言語・C++・C#
-
13
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
14
既定のコンストラクタがない?
C言語・C++・C#
-
15
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
16
VB.netでDLLを読み込んで実行する際に、スタックを不安定にしていますというエラーが出ます。
Visual Basic(VBA)
-
17
セキュリティの警告が出ないようにするには。
Windows Vista・XP
-
18
VB.NETで参照設定したDLLの修正反映
Visual Basic(VBA)
-
19
既定のコンストラクタがありません。というエラーについて
C言語・C++・C#
-
20
Windows Formアプリからコンソールを呼び出して文字を出力させたい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プロジェクトを開くときに・・・
-
DLL参照時に指定されたモジュー...
-
VC++6 EXEをDLLに変換
-
VC#での参照の追加が上手くいき...
-
visual studio2019でデバッグが...
-
Eclipseのブレークポイントが○...
-
デバッガでステップ実行してい...
-
Release版のexeが動きません
-
VC++ 2010でアプリケーションが...
-
C#、C++間のDLLの呼び出しについて
-
visual studio 2008 のデバッグ...
-
Visual Studio 2008(ASP.net) ...
-
「カレントフォルダ以外にある...
-
VBでブックマークを保存する方...
-
Visual StudioでDjangoのプロジ...
-
ASP.NETでデバッグができない
-
エラーについて
-
Visual C++ 2005でソケット通信...
-
結合ハンドルが無効です
-
vb ver6 でformat文やTrim文の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseでデバックするとエラー...
-
Visual studio2017で、2回目の...
-
DLL参照時に指定されたモジュー...
-
visual studio 2019 についての...
-
eclipseでプログラムが実行でき...
-
visual studio2019でデバッグが...
-
デバッグとビルドは何が違うの...
-
Eclipseのブレークポイントが○...
-
visual studio 2008 のデバッグ...
-
ブレークポイントは現在の設定...
-
デバッガでステップ実行してい...
-
ソリューションをまたがるデバ...
-
Visual Studio 2010 のC#で…
-
VC++でSQL Serverに接続するに...
-
vbprojファイルが開けません
-
VB6.0を使用しています
-
VC++でDeugモードOKで、Release...
-
Visual C#で、usingが出来ない...
-
VB.netを実行するとデバック プ...
-
C言語での開発でエラーが出て困...
おすすめ情報