![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
初回は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を見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
VBAでfunctionを利用しようとし...
-
インポート時のエラー「データ...
-
VBでSQL文のUPDATE構文を使った...
-
Python openpyxlを使用したセル...
-
String""から型'Double'への変...
-
【VBAエラー】Nextに対するFor...
-
TransferSpreadsheetのエラー処理
-
エクセル関数式=ABSで#VALUE!...
-
html5 エラー
-
VBA データ(特定値)のある最...
-
VB.net 重複チェックがしたいです
-
実行時エラー'-2147467259(8000...
-
お助けください!VBAのファイル...
-
Excel VBA 複数ブックシートご...
-
VBAで時間(00:00形式)を積算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
ActiveCell.FormulaR1C1の変数
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
ApplicationとWorksheetFunctio...
-
フランスの生年月日(jj/mm/aaaa)
-
【マクロ】 IFERROR関数をマク...
おすすめ情報