初回は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も見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
DLLの暗黙リンクの調べ方
C言語・C++・C#
-
DLL関数を使ったプログラム
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
お助けください!VBAのファイル...
-
【VBAエラー】Nextに対するFor...
-
.VBSだとADODBのプロバイダが見...
-
ACCESSで値を代入できないとは?
-
Excel vbaについての質問
-
エクセルVBAで埋め込みグラフ(C...
-
VB6とVB.NETでNullの扱いが違う?
-
インページ操作の実行エラー
-
エクセルVBAで#N/Aのようなエ...
-
「実行時エラー '3167' レコー...
-
マクロで"#N/A"のエラー行を削...
-
ExecuteNonQueryメソッドの戻り値
-
UBoundに配列がありませんとエ...
-
エクセル 足し算引き算で 空...
-
エクセル関数式=ABSで#VALUE!...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
VBA データ(特定値)のある最...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
On ErrorでエラーNoが0
-
「実行時エラー '3167' レコー...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
実行時エラー 438 の解決策をお...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
Filter関数を用いた結果、何も...
-
ApplicationとWorksheetFunctio...
-
エクセルVBAで埋め込みグラフ(C...
-
VBでSQL文のUPDATE構文を使った...
おすすめ情報