嘗試爲可執行文件創建加載程序時,如果參數中提供的字符串長度超過某個長度,則無法執行加載程序。但是參數是從初始化文件中完全讀取的。當參數=空時它也崩潰。將字符串附加到lpCmdLine WinMain
typedef int (__cdecl *ExecMain_t)(HINSTANCE, HINSTANCE, LPSTR, int);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HMODULE Loader = LoadLibraryExA(".\\library.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
char* Parameters;
CIniFile iniReader(".\\Configure.ini");
Parameters = iniReader.IniReadValue("App", "Parameters");
char xCommand[MAX_PATH] = {0};
_snprintf_s(xCommand, _TRUNCATE, "-verify "); //parameter from exe
strcat_s(xCommand, _TRUNCATE, Parameters);
strcpy_s(lpCmdLine, _TRUNCATE, xCommand);
delete[] Parameters;
Parameters = NULL;
ExecMain_t procExecMain = (ExecMain_t)GetProcAddress(Loader,"ExecMain");
procExecMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
return 1;
}
崩潰描述:
問題事件名稱:APPCRASH 應用名稱:exec.exe 應用程序版本:0.0.0.0 應用程序時間戳:530df50a 故障模塊名稱:KERNELBASE.dll 故障模塊版本:6.2.9200.16384
編輯:試圖找出爲什麼當參數字符串長度增加時崩潰。如果我通過用「-verify」(通過參數從EXE)
EDIT2沿着多個字符
即使崩潰:通過_TRUNCATE替換MAX_PATH修改的代碼。似乎適用於參數中的某些字符,但超出時會崩潰。
請張貼[SSCCE](HTTP ://www.sscce.org/)。您當前的代碼片段中沒有任何內容可以完全解釋您遇到的錯誤。 – ComicSansMS
我編輯了代碼 – GaNi
'strcpy'到'WinMain'的'lpCmdLine'聽起來像個不好主意。 – ComicSansMS