VC PlusPlus:DLLのデバッグRegsvr32登録して使うタイプの場合Windows10 64bit
VC PlusPlusに戻る
概要
Deskbandのdllのサンプル(https://docs.microsoft.com/en-us/samples/microsoft/windows-classic-samples/deskbands/)を入手したのですが、どうやってデバッグするかわかりませんでした。今回の場合はregsvr32から呼び出されるタイプだったのですが、その他のdll呼び出しメカニズムを使っている場合は、ここで紹介する例だけでは、対応できないです。アタッチがキーワードになると思います。
まずは、dllを動作させる方法を知っているとして、呼び出し元がよくわからない場合はdllのプロジェクトのDllMain関数に以下のプログラムを追加すると良いでしょう。
ヘッダ追加と名前空間の設定
<syntaxhighlight2 lang="cpp">
- include <tlhelp32.h>
- include<iostream>
- 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に戻る