
初回はLoadLibrary()が"cnpdsdk.dll"が成功するが、2回目からはLoadLibrary()が"cnpdsdk.dll"を読み込み失敗してしまいます。原因は何なのでしょうか?
// -----------------------------------------------------
// (7):指定された実行可能モジュールを、呼び出し側プロセスのアドレス空間内にマ ップ
// -----------------------------------------------------
hDLL = LoadLibrary(PDSDK_DLL);
if(hDLL == NULL){
// エラー処理
MessageBox("実行可能モジュールのマッピングに失敗しました","LoadLibrary() failed", MB_OK|MB_ICONEXCLAMATION);
FreeResource();// リソース解放
m_Combo_SelectPrinter.SetCurSel(-1); // 現在の選択項目を削除(使用するプリンタ)
return;
}
No.5ベストアンサー
- 回答日時:
なにがおかしいか言うなら何度も使うDLLを都度FreeLibraryすることがおかしい
FreeLibraryはLoadLibraryと絶対に対にならなければならないようにしているとかならその強迫観念が間違ってる
FreeLibraryせずにプロセスが終了するとリソースリーク起こすとか思っちゃいませんか
普通のプログラムならFreeLibraryを呼び出す必要は全くない
No.4
- 回答日時:
>DWORD dwErr = GetLastError();で調べたところ下記のプログラムを通過すると
>エラーが発生することがわかりました。しかしおかしいところはなにもありません。
で、GetLastError()でどんな値が戻ってきていたんですか?
掲示されたコードだけでは特に問題になっているとも思えませんが。
強いてあげれば、FreeLibrary()が成功しているのかな?と…。
ただ、ロード済みのDLLをLoadLibrary()してもNULLは戻らないと思われますが。
…普通なら、ですけどね。
DllMain()の処理によってはNULLを返すこともあるでしょうし。
# それ以前にデバッガの使い方を理解されていないような気がするのですが…。
No.3
- 回答日時:
>GetLastError(),はどのように使えばいいのでしょうか?
オウム返しに聞く前に検索しましょう。
hDLL = LoadLibrary(PDSDK_DLL);
if(hDLL == NULL){
// エラー処理
のあとあたりにでも、
DWORD dwErr = GetLastError();
とでもして値を取得してください。
ブレークポイント張って、値をデバッガで覗いてからヘッダファイル内をGrepするもよし、
ErrorLookupでメッセージ化してみるもよし、
FormatMessage()でメッセージ化してMessageBox()で表示するなり、ログに出力するなり…
ちなみに、私の場合は最初と2番目の方法ですかね。
ErrorLookupでエラーの内容を確認する。
ヘッダに定義されているエラー名でググる。
など。
この回答への補足
DWORD dwErr = GetLastError();で調べたところ下記のプログラムを通過すると
エラーが発生することがわかりました。しかしおかしいところはなにもありません。
わかるようでしたら教えていただきたくよろしく御願いします。
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CStringFileName;
CFileDialog*dlgFile;
CWnd*pWnd;
dlgFile = new CFileDialog(TRUE, "dat", "*.dat",OFN_FILEMUSTEXIST,
"*.dat|全て(*.*)|*.*||");
if (dlgFile->DoModal() == IDOK){
FileName = dlgFile->GetPathName();//選択ファイル名取得
}
delete dlgFile;
pWnd = (CWnd *)GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText(FileName);
FreeResource();// リソース解放
return;
}
FreeResource();のなかにFreeLibrary()が入っています。
No.1
- 回答日時:
1回目にLoadLibrary()したプログラムは、使い終わったらFreeLibrary()していますか?
使い終わったのにFreeLibrary()しないままプログラムを終了させると、場合によっては「DLL内の排他処理」のせいで「使用している人が居るからと、2度目のLoadLibrary()を拒否」するかも知れません。
この回答への補足
FreeLibrary()は下記のように使用しています
// ダイナミックリンクライブラリ(DLL)の解放
if(hDLL != NULL){
FreeLibrary(hDLL);
hDLL = NULL;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- その他(ソフトウェア) MMD PMXエディタ プラグイン 押せない はじめまして。MMDについて質問させていただきます。 7 2022/05/04 15:53
- 大学・短大 回答お願い致します! 次の設定で、それぞれの確率を計算せよ。 あるゲームでは、あることに1人でチャレ 2 2023/01/10 23:34
- その他(コンピューター・テクノロジー) パソ粥が壊れてしまい。 新しく買ったパソコンに Amplitued5 Max をダウンロードインスト 1 2022/05/22 00:33
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- Visual Basic(VBA) 【VBA】For文を使用し、行をコピーして別シートに貼り付ける方法を教えてください。 4 2022/07/19 09:01
- 政治 固体燃料ロケット「イプシロン」の失敗の原因は名前ですね? 2 2022/10/13 09:26
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VB.NET】 パワポ操作を非表示で
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
On ErrorでエラーNoが0
-
マクロで"#N/A"のエラー行を削...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
VBA データ(特定値)のある最...
-
ASPでこんなエラーが出たんです...
-
Excel vbaについての質問
-
ゴールシーク関数のマクロが作...
-
VB.net 重複チェックがしたいです
-
VBAのリストボックスで、横スク...
-
Perlのエラーについてご教授く...
-
Oracle Case文でのエラー(デー...
-
VB6とVB.NETでNullの扱いが違う?
-
Filter関数を用いた結果、何も...
-
VBでSQL文のUPDATE構文を使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
LaTeXのエラーについて(コンパ...
-
Filter関数を用いた結果、何も...
-
ACCESSで値を代入できないとは?
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
ApplicationとWorksheetFunctio...
-
実行時エラー 438 の解決策をお...
-
VBでSQL文のUPDATE構文を使った...
-
pythonのopenpyxlについて
-
【Access】Excelインポート時に...
-
SQLでエラーです。
おすすめ情報