私は/ mtでコンパイルされたDLLを持っています。 DLLはrundll32でcmdから呼び出す関数 'main'をエクスポートします。この関数は、環境変数のレジストリに格納されているいくつかの設定を取る予定のヘッダから別のものを呼び出します。私がやっているか想像するに、ここでのコードの一部です:このブレークポイントは現在ヒットしません:Dllデバッグ
DLL:メイン
#include "..\Header.h"
extern "C" void APIEXP WINAPI main(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow){
char *parentPath = nullptr;
size_t sz;
DWORD buffSize;
block; //this is a messagebox
buffSize = sizeof(client.pc_name);
if (!GetComputerNameA(client.pc_name, &buffSize)) strcpy(client.pc_name, "");
if (!GetUserNameA(client.user_name, &buffSize)) strcpy(client.user_name, "");
client.os_time = time(0);
client.version = Version;
client.os_version = Exe_version;
TextSetting("pc_description", client.pc_description);
TextSetting("custom_name", client.custom_name);
}
LPSTR TextSetting(LPSTR setting,LPSTR buff) {
//Returns all data in buff
DWORD type, sz;
msg("dll: ","function called");
if (RegGetValueA(HKEY_CURRENT_USER,"Environment", setting, RRF_RT_REG_SZ | RRF_RT_REG_MULTI_SZ, &type, (LPBYTE)buff, &sz) != ERROR_SUCCESS) {
buff[0] = 0;
msg("sdsv: ", "err");
return buff;
}
return buff;
}
LPSTR con(LPSTR dest, LPSTR a, LPSTR b, LPSTR c) {
//c is optional and default: ""
strcpy(dest, a);
strcat(dest, b);
strcat(dest, c);
return dest;
}
VOID msg(LPSTR app,LPSTR a) {
char temp_buffer[2048];
con(temp_buffer , app,a, "\n");
OutputDebugStringA(temp_buffer);
}
ヘッダーは、上記のコードは完璧に動作します:注目点をここにメインのTextSettingがあります。データを必要に応じて取得します。しかし、TextSettingからmsg("dll: ","function called");
を削除すると、単にエラーが返されます(戻りコードはERROR_SUCCESSではありません)。さらに、私は関数をデバッグすることはできません。rundll32プロセスにデバッガを接続すると、TextSettingsのif文に設定したブレークポイントがタイトルに記載されている警告になります。ここで
私が気づいたいくつかの余分なもの: それは私がMSGや詐欺の関数を呼び出した場合(それが詐欺で使用されるstrの*関数のように見える作品コードを動作させる)。さらに:if文の前にstrcpyとstrcatだけを使用すれば動作します。問題が何であるかわかりません(if文で使用されているコードを奇妙に修正するバッファオーバーフローがありますか?)
ここでは、「デバッグ設定」でコンパイルしましたか? – AndyG
最初はリリースされていますが、デバッグは行われません。 Releaseの下では、デバッガが動作するはずだと分かっていたので変です。しかしそれはそうです。プロジェクトは大きく、以前はDebugに変更したことがありません(数回だけ)。どのような動作にも影響しないと私は考えています。リリースではスクリーンショットが取られます。 –
最適化をオフにしてデバッグシンボルを生成すると、リリース構成でデバッグが機能します。デバッグ構成のポイントは、それを簡単にすることです。 – AndyG