掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VC++のEXEをDLLにしたい (ID:56594)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
最終的には個々のアプリケーションをパイプで繋ぎ、 必要なデータを送受信することで自分が思っていた動作をすることが出来ました。 アドバイスいただきありがとうございました。 以下にパイプ作成の処理を記載しておきます。 ******************************************************************** /*------------------------------------------- 受信スレッド -------------------------------------------*/ static UINT PipeSendRevice(HANDLE hPipe) { LPTSTR lptszInBuffLocal = new TCHAR[1024]; int nData = 0; char szWork[32]; DWORD dwReaded; ReadFile(hPipe, lptszInBuffLocal, 1024, &dwReaded, NULL); strcpy(gCommunicationData.dReciveBuffData, lptszInBuffLocal); // 受信データの解析 ::ZeroMemory(szWork, sizeof(szWork)); ::CopyMemory(&szWork, &gCommunicationData.dReciveBuffData[nData], 1); sscanf(szWork, _T("%d"), &gCommunicationData.dHealthSignal); FlushFileBuffers(hPipe); DisconnectNamedPipe(hPipe); CloseHandle(hPipe); delete lptszInBuffLocal; return 0; } /*------------------------------------------- 名前付きパイプサーバーメインスレッド -------------------------------------------*/ static UINT PipeServer(LPVOID lpvParam) { HANDLE hPipe; OVERLAPPED ol; HANDLE hEvents[2]; DWORD dwOpenMode = FILE_FLAG_OVERLAPPED | PIPE_ACCESS_DUPLEX; DWORD dwPipeMode = PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT; if((hEvents[1] = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL) { return GetLastError(); } hEvents[0] = hEvents[1]; while(TRUE) { hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\ANALOG_UNIPULX_PIPE"), dwOpenMode, dwPipeMode, PIPE_UNLIMITED_INSTANCES, 0, 0, NMPWAIT_USE_DEFAULT_WAIT, NULL); if(hPipe == INVALID_HANDLE_VALUE) { return GetLastError(); } ZeroMemory(&ol, sizeof(OVERLAPPED)); ol.hEvent = hEvents[1]; ResetEvent(ol.hEvent); // パイプの接続 ConnectNamedPipe(hPipe, &ol); // データ受信まで待機 WaitForMultipleObjects(2, hEvents, FALSE, INFINITE); // 受信データの解析 AfxBeginThread(PipeSendRevice, (LPVOID)hPipe, THREAD_PRIORITY_IDLE); } CloseHandle(hPipe); CloseHandle(hEvents[1]); return TRUE; } /*------------------------------------------- 名前付きパイプサーバーメインスレッド -------------------------------------------*/ BOOL CMainFrame::ComunicationMain() { LRESULT lResult = ERROR_SUCCESS; HANDLE hThread = AfxBeginThread(PipeServer, NULL, THREAD_PRIORITY_IDLE); if(hThread == INVALID_HANDLE_VALUE) { lResult = GetLastError(); return (int)lResult; } DWORD dwExitCode = ERROR_SUCCESS; do { Sleep(500); GetExitCodeThread(hThread, &dwExitCode); }while(dwExitCode == STILL_ACTIVE); return (int)lResult; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.