VC PlusPlus:DLLのデバッグRegsvr32登録して使うタイプの場合Windows10 64bit

提供:yonewiki
2022年9月26日 (月) 10:03時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「VC PlusPlusに戻る == '''概要''' ==  Deskbandのdllのサンプル([https://docs.microsoft.com/en-us/samples/microsoft/windows-classic-samples/deskbands/ https://docs.microsoft.com/en-us/samples/microsoft/windows-classic-samples/deskbands/])を入手したのですが、どうやってデバッグするかわかりませんでした。今回の場合はregsvr32から呼び出されるタイプだったのですが、その他のdll呼び出しメカニズ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

VC PlusPlusに戻る

概要

 Deskbandのdllのサンプル(https://docs.microsoft.com/en-us/samples/microsoft/windows-classic-samples/deskbands/)を入手したのですが、どうやってデバッグするかわかりませんでした。今回の場合はregsvr32から呼び出されるタイプだったのですが、その他のdll呼び出しメカニズムを使っている場合は、ここで紹介する例だけでは、対応できないです。アタッチがキーワードになると思います。


 まずは、dllを動作させる方法を知っているとして、呼び出し元がよくわからない場合はdllのプロジェクトのDllMain関数に以下のプログラムを追加すると良いでしょう。


 ヘッダ追加と名前空間の設定 <syntaxhighlight2 lang="cpp">

  1. include <tlhelp32.h>
  2. include<iostream>
  3. include<fstream>

using namespace std; </syntaxhighlight2>

 プログラム部 <syntaxhighlight2 lang="cpp">

   WCHAR wcpBuff[256];
   WCHAR wcpGetModuleFileNameBuff[256];
   HMODULE hModule = NULL;
   std::wofstream outputfile2("test.txt", ios::trunc);
   outputfile2.close();
   
   std::wofstream outputfile("test.txt", ios::app);
   outputfile.imbue(std::locale("", LC_CTYPE));
   GetModuleFileName((HMODULE)hModule, wcpGetModuleFileNameBuff, 256);
   wsprintf(wcpBuff, L"");
   wsprintf(wcpBuff, L"■GetModuleFileName = %ls\n", wcpGetModuleFileNameBuff);
   outputfile << wcpBuff;

</syntaxhighlight2>


 上記のプログラムを追加すると、test.txtファイルにプログラムファイル名が記述されます。アタッチするとよいでしょう。自分はDLLのプログラムを作ったことないし、サンプルもまだ入手したことないです、アタッチのやり方は知らないので、よくわからないですけど、ここまで分かってたら、きっとうまく行きます。


 今回のサンプルだとregsvr32に登録して使うタイプだとなっているので、コマンドプロンプトで「regsvr32 DeskbandSDKSample.dll」で登録すると以下のようなメッセージが受け取れます。管理者権限のコマンドプロンプトである必要があります。dllのあるディレクトリパスもちゃんと合わせないと駄目ですよ。カレントディレクトリを移動するか、パス付きでdll名を指定するかですね。


 ■GetModuleFileName = C:\WINDOWS\SysWOW64\regsvr32.exe


 そうすると、これは間違いなくregsvr32から呼び出されてますね。


 この場合、以下のような手順で、デバッグ作業が始められます。

1.Visual Studio 起動アイコンを右クリックして管理者として実行。プロジェクトを開く

2.プロジェクトのプロパティダイアログを開く

左の領域のTreeでDebugを選択する。
コマンド = C:\WINDOWS\SysWOW64\regsvr32.exe
コマンド引数 = $(OutDir)$(TargetName)$(TargetExt)
作業ディレクトリ = $(OutDir)
その他の設定は規定値でいいよ。

3.デバッグ実行


  VC PlusPlusに戻る