У меня есть C++ dll, использующая другое программное обеспечение. Мне нужно, когда программа вызывает одну функцию этой DLL, она показывает один диалог для получения пользователя/pwd. Мой код до работы, но в это время не работает.Win32 CreateDialogParam Not Works
INT_PTR CALLBACK DialogFunc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
g_hInstance = hModule;
bRun = FALSE;
dwNewLong = 0;
g_Msg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
g_hWnd = FindWindowA("TForm1", "Form1");
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
HWND hWnd1;
int nRet;
char b1[]="VALID";
HWND g_hDlg2,hWnd,hDlg2,hDlg3;
INT_PTR CALLBACK DialogFunc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
read(f1);
read1(f2);
hDlg1=GetDlgItem(hDlg,IDC_EDIT1);
SetWindowTextA(hDlg1,UserSaved);
hDlg2=GetDlgItem(hDlg,IDC_EDIT2);
SetWindowTextA(hDlg2,PWDSaved);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON2:
hDlg3=hDlg;
GetWindowText(hDlg1,username,1024);
write(f1);
GetWindowText(hDlg2,key,1024);
write1(f2);
if(memcmp(Get_Account_Number_FromWEB(),b1,sizeof(b1))==0){result=1; DestroyWindow(hDlg);}
else MessageBox(0,TEXT("Wrong User or PWD"),0,0);
break;
case IDC_BUTTON3:
DestroyWindow(hDlg);
break;
case IDC_EDIT1:
break;
case IDC_EDIT2:
break;
}
break;
case WM_CLOSE:
SetWindowLongA(hDlg, GWL_WNDPROC, dwNewLong);
DestroyWindow(hDlg);
return TRUE;
break;
}
return FALSE;
}
int aa=0;
HWND hWnd2;
int dd;
HWND hDlg;
MT4_EXPFUNC int __stdcall INITIAL(HWND hWnd)
{
MSG msg;
BOOL msgstatus;
if(aa==0){
hDlg = CreateDialogParamA(g_hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DialogFunc, 0);
SetWindowPos(hDlg, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | WS_EX_TOPMOST);
ShowWindow(hDlg, SW_SHOW);
aa=1;
}
dd=result;
hWnd2=hWnd;
return result;
}
Я добавил ресурс в dll и скомпилировал без проблем. но при вызове этой функции он не работает и не отображает диалоговое окно. Любая ошибка в моем коде? С уважением,
'CreateDialogParam' действительно работает. Да, в вашем коде есть ошибка. Какую отладку вы сделали до сих пор? Я не вижу никакой проверки возвращаемых значений в вашем коде. Почему нет? –
Он должен вернуть значение результата, 0 или 1. Как я уже говорил, этот код работал для меня. Я скомпилирован как режим Debug & Release и попробую dll, но не работает снова. – user2769769
Нет, вы вызываете много вызовов API Win32 и не проверяете возвращаемое значение. Шаг 1 - добавить к вашему коду обработку ошибок. –