X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2bda0e173844e8e0f8acf4e8ad8b5c26e5c6fe5d..2de8030dbe61287fb398057d61dd22fe45078c1d:/src/msw/dde.cpp diff --git a/src/msw/dde.cpp b/src/msw/dde.cpp index e8c8bd1121..d8fe4dfa5a 100644 --- a/src/msw/dde.cpp +++ b/src/msw/dde.cpp @@ -24,22 +24,26 @@ #include "wx/defs.h" #endif -#if USE_IPC +#if wxUSE_IPC #ifndef WX_PRECOMP #include "wx/utils.h" #include "wx/app.h" #endif -#include "wx/msw/private.h" +#include "wx/module.h" #include "wx/dde.h" +#include "wx/msw/private.h" +#include +#include + +#ifndef __TWIN32__ #ifdef __GNUWIN32__ #include "wx/msw/gnuwin32/extra.h" #endif +#endif -#include -#include #include #ifdef __WIN32__ @@ -118,6 +122,21 @@ void wxDDECleanUp() delete [] DDEDefaultIPCBuffer ; } +// A module to allow DDE initialization/cleanup +// without calling these functions from app.cpp or from +// the user's application. + +class wxDDEModule: public wxModule +{ +DECLARE_DYNAMIC_CLASS(wxDDEModule) +public: + wxDDEModule() {} + bool OnInit() { wxDDEInitialize(); return TRUE; }; + void OnExit() { wxDDECleanUp(); }; +}; + +IMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule) + // Global find connection static wxDDEConnection *DDEFindConnection(HCONV hConv) { @@ -188,16 +207,16 @@ static wxDDEServer *DDEFindServer(const wxString& s) wxDDEServer::wxDDEServer(void) { - service_name = ""; + m_serviceName = ""; wxDDEServerObjects.Append(this); } bool wxDDEServer::Create(const wxString& server_name) { - service_name = server_name; + m_serviceName = server_name; HSZ serviceName = DdeCreateStringHandle(DDEIdInst, (char*) (const char *)server_name, CP_WINANSI); - if (DdeNameService(DDEIdInst, serviceName, NULL, DNS_REGISTER) == 0) + if (DdeNameService(DDEIdInst, serviceName, (HSZ) NULL, DNS_REGISTER) == 0) { DDEPrintError(); return FALSE; @@ -207,9 +226,9 @@ bool wxDDEServer::Create(const wxString& server_name) wxDDEServer::~wxDDEServer(void) { - if (service_name != "") + if (m_serviceName != "") { - HSZ serviceName = DdeCreateStringHandle(DDEIdInst, (char*) (const char *)service_name, CP_WINANSI); + HSZ serviceName = DdeCreateStringHandle(DDEIdInst, (char*) (const char *)m_serviceName, CP_WINANSI); if (DdeNameService(DDEIdInst, serviceName, NULL, DNS_UNREGISTER) == 0) { DDEPrintError(); @@ -217,7 +236,7 @@ wxDDEServer::~wxDDEServer(void) } wxDDEServerObjects.DeleteObject(this); - wxNode *node = connections.First(); + wxNode *node = m_connections.First(); while (node) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); @@ -227,7 +246,7 @@ wxDDEServer::~wxDDEServer(void) } // If any left after this, delete them - node = connections.First(); + node = m_connections.First(); while (node) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); @@ -244,12 +263,12 @@ wxConnectionBase *wxDDEServer::OnAcceptConnection(const wxString& /* topic */) wxDDEConnection *wxDDEServer::FindConnection(WXHCONV conv) { - wxNode *node = connections.First(); + wxNode *node = m_connections.First(); wxDDEConnection *found = NULL; while (node && !found) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); - if (connection->hConv == conv) + if (connection->m_hConv == conv) found = connection; else node = node->Next(); } @@ -259,12 +278,12 @@ wxDDEConnection *wxDDEServer::FindConnection(WXHCONV conv) // Only delete the entry in the map, not the actual connection bool wxDDEServer::DeleteConnection(WXHCONV conv) { - wxNode *node = connections.First(); + wxNode *node = m_connections.First(); bool found = FALSE; while (node && !found) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); - if (connection->hConv == conv) + if (connection->m_hConv == conv) { found = TRUE; delete node; @@ -289,12 +308,12 @@ wxDDEClient::wxDDEClient(void) wxDDEClient::~wxDDEClient(void) { wxDDEClientObjects.DeleteObject(this); - wxNode *node = connections.First(); + wxNode *node = m_connections.First(); while (node) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); delete connection; // Deletes the node implicitly (see ~wxDDEConnection) - node = connections.First(); + node = m_connections.First(); } } @@ -309,20 +328,20 @@ wxConnectionBase *wxDDEClient::MakeConnection(const wxString& /* host */, const HSZ topic_atom = DdeCreateStringHandle(DDEIdInst, (char*) (const char *)topic, CP_WINANSI); HCONV hConv = DdeConnect(DDEIdInst, serviceName, topic_atom, (PCONVCONTEXT)NULL); - if (hConv == NULL) - return NULL; + if (hConv == (HCONV) NULL) + return (wxConnectionBase*) NULL; else { wxDDEConnection *connection = (wxDDEConnection*) OnMakeConnection(); if (connection) { - connection->hConv = (WXHCONV) hConv; - connection->topic_name = topic; - connection->client = this; - connections.Append(connection); + connection->m_hConv = (WXHCONV) hConv; + connection->m_topicName = topic; + connection->m_client = this; + m_connections.Append(connection); return connection; } - else return NULL; + else return (wxConnectionBase*) NULL; } } @@ -333,12 +352,12 @@ wxConnectionBase *wxDDEClient::OnMakeConnection(void) wxDDEConnection *wxDDEClient::FindConnection(WXHCONV conv) { - wxNode *node = connections.First(); + wxNode *node = m_connections.First(); wxDDEConnection *found = NULL; while (node && !found) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); - if (connection->hConv == conv) + if (connection->m_hConv == conv) found = connection; else node = node->Next(); } @@ -348,12 +367,12 @@ wxDDEConnection *wxDDEClient::FindConnection(WXHCONV conv) // Only delete the entry in the map, not the actual connection bool wxDDEClient::DeleteConnection(WXHCONV conv) { - wxNode *node = connections.First(); + wxNode *node = m_connections.First(); bool found = FALSE; while (node && !found) { wxDDEConnection *connection = (wxDDEConnection *)node->Data(); - if (connection->hConv == conv) + if (connection->m_hConv == conv) { found = TRUE; delete node; @@ -373,54 +392,54 @@ wxDDEConnection::wxDDEConnection(char *buffer, int size) { if (DDEDefaultIPCBuffer == NULL) DDEDefaultIPCBuffer = new char[DDEDefaultIPCBufferSize]; - buf_ptr = DDEDefaultIPCBuffer; - buf_size = DDEDefaultIPCBufferSize; + m_bufPtr = DDEDefaultIPCBuffer; + m_bufSize = DDEDefaultIPCBufferSize; } else { - buf_ptr = buffer; - buf_size = size; + m_bufPtr = buffer; + m_bufSize = size; } - topic_name = ""; + m_topicName = ""; - client = NULL; - server = NULL; + m_client = NULL; + m_server = NULL; - hConv = 0; - sending_data = NULL; + m_hConv = 0; + m_sendingData = NULL; } wxDDEConnection::wxDDEConnection(void) { - hConv = 0; - sending_data = NULL; - server = NULL; - client = NULL; + m_hConv = 0; + m_sendingData = NULL; + m_server = NULL; + m_client = NULL; if (DDEDefaultIPCBuffer == NULL) DDEDefaultIPCBuffer = new char[DDEDefaultIPCBufferSize]; - buf_ptr = DDEDefaultIPCBuffer; - buf_size = DDEDefaultIPCBufferSize; - topic_name = ""; + m_bufPtr = DDEDefaultIPCBuffer; + m_bufSize = DDEDefaultIPCBufferSize; + m_topicName = ""; } wxDDEConnection::~wxDDEConnection(void) { - if (server) - server->GetConnections().DeleteObject(this); + if (m_server) + m_server->GetConnections().DeleteObject(this); else - client->GetConnections().DeleteObject(this); + m_client->GetConnections().DeleteObject(this); } // Calls that CLIENT can make bool wxDDEConnection::Disconnect(void) { - DDEDeleteConnection((HCONV) hConv); - return (DdeDisconnect((HCONV) hConv) != 0); + DDEDeleteConnection((HCONV) m_hConv); + return (DdeDisconnect((HCONV) m_hConv) != 0); } -bool wxDDEConnection::Execute(char *data, int size, int format) +bool wxDDEConnection::Execute(char *data, int size, wxIPCFormat format) { DWORD result; if (size < 0) @@ -428,31 +447,31 @@ bool wxDDEConnection::Execute(char *data, int size, int format) size ++; - return (DdeClientTransaction((LPBYTE)data, size, (HCONV) hConv, + return (DdeClientTransaction((LPBYTE)data, size, (HCONV) m_hConv, NULL, format, XTYP_EXECUTE, 5000, &result) ? TRUE : FALSE); } -char *wxDDEConnection::Request(const wxString& item, int *size, int format) +char *wxDDEConnection::Request(const wxString& item, int *size, wxIPCFormat format) { DWORD result; HSZ atom = DDEGetAtom(item); - HDDEDATA returned_data = DdeClientTransaction(NULL, 0, (HCONV) hConv, + HDDEDATA returned_data = DdeClientTransaction(NULL, 0, (HCONV) m_hConv, atom, format, XTYP_REQUEST, 5000, &result); - DWORD len = DdeGetData(returned_data, (LPBYTE)(buf_ptr), buf_size, 0); + DWORD len = DdeGetData(returned_data, (LPBYTE)(m_bufPtr), m_bufSize, 0); DdeFreeDataHandle(returned_data); if (size) *size = (int)len; if (len > 0) { - return buf_ptr; + return m_bufPtr; } else return NULL; } -bool wxDDEConnection::Poke(const wxString& item, char *data, int size, int format) +bool wxDDEConnection::Poke(const wxString& item, char *data, int size, wxIPCFormat format) { DWORD result; if (size < 0) @@ -461,7 +480,7 @@ bool wxDDEConnection::Poke(const wxString& item, char *data, int size, int forma size ++; HSZ item_atom = DDEGetAtom(item); - return (DdeClientTransaction((LPBYTE)data, size, (HCONV) hConv, + return (DdeClientTransaction((LPBYTE)data, size, (HCONV) m_hConv, item_atom, format, XTYP_POKE, 5000, &result) ? TRUE : FALSE); } @@ -470,7 +489,7 @@ bool wxDDEConnection::StartAdvise(const wxString& item) DWORD result; HSZ atom = DDEGetAtom(item); - return (DdeClientTransaction(NULL, 0, (HCONV) hConv, + return (DdeClientTransaction(NULL, 0, (HCONV) m_hConv, atom, CF_TEXT, XTYP_ADVSTART, 5000, &result) ? TRUE : FALSE); } @@ -479,12 +498,12 @@ bool wxDDEConnection::StopAdvise(const wxString& item) DWORD result; HSZ atom = DDEGetAtom(item); - return (DdeClientTransaction(NULL, 0, (HCONV) hConv, + return (DdeClientTransaction(NULL, 0, (HCONV) m_hConv, atom, CF_TEXT, XTYP_ADVSTOP, 5000, &result) ? TRUE : FALSE); } // Calls that SERVER can make -bool wxDDEConnection::Advise(const wxString& item, char *data, int size, int format) +bool wxDDEConnection::Advise(const wxString& item, char *data, int size, wxIPCFormat format) { if (size < 0) size = strlen(data); @@ -492,10 +511,10 @@ bool wxDDEConnection::Advise(const wxString& item, char *data, int size, int for size ++; HSZ item_atom = DDEGetAtom(item); - HSZ topic_atom = DDEGetAtom(topic_name); - sending_data = data; - data_size = size; - data_type = format; + HSZ topic_atom = DDEGetAtom(m_topicName); + m_sendingData = data; + m_dataSize = size; + m_dataType = format; return (DdePostAdvise(DDEIdInst, topic_atom, item_atom) != 0); } @@ -535,10 +554,10 @@ DWORD /* lData2 */) (wxDDEConnection*) server->OnAcceptConnection(wxString(topic_buf)); if (connection) { - connection->server = server; + connection->m_server = server; server->GetConnections().Append(connection); - connection->hConv = 0; - connection->topic_name = topic_buf; + connection->m_hConv = 0; + connection->m_topicName = topic_buf; DDECurrentlyConnecting = connection; return (DDERETURN)TRUE; } @@ -551,7 +570,7 @@ DWORD /* lData2 */) { if (DDECurrentlyConnecting) { - DDECurrentlyConnecting->hConv = (WXHCONV) hConv; + DDECurrentlyConnecting->m_hConv = (WXHCONV) hConv; DDECurrentlyConnecting = NULL; return (DDERETURN)TRUE; } @@ -577,9 +596,9 @@ DWORD /* lData2 */) if (connection) { - DWORD len = DdeGetData(hData, (LPBYTE)(connection->buf_ptr), connection->buf_size, 0); + DWORD len = DdeGetData(hData, (LPBYTE)(connection->m_bufPtr), connection->m_bufSize, 0); DdeFreeDataHandle(hData); - if (connection->OnExecute(connection->topic_name, connection->buf_ptr, (int)len, wFmt)) + if (connection->OnExecute(connection->m_topicName, connection->m_bufPtr, (int)len, (wxIPCFormat) wFmt)) return (DDERETURN)DDE_FACK; else return (DDERETURN)DDE_FNOTPROCESSED; @@ -598,7 +617,7 @@ DWORD /* lData2 */) CP_WINANSI); int user_size = -1; - char *data = connection->OnRequest(connection->topic_name, wxString(item_name), &user_size, wFmt); + char *data = connection->OnRequest(connection->m_topicName, wxString(item_name), &user_size, (wxIPCFormat) wFmt); if (data) { if (user_size < 0) user_size = strlen(data); @@ -620,9 +639,9 @@ DWORD /* lData2 */) char item_name[200]; DdeQueryString(DDEIdInst, hsz2, (LPSTR)item_name, sizeof(item_name), CP_WINANSI); - DWORD len = DdeGetData(hData, (LPBYTE)(connection->buf_ptr), connection->buf_size, 0); + DWORD len = DdeGetData(hData, (LPBYTE)(connection->m_bufPtr), connection->m_bufSize, 0); DdeFreeDataHandle(hData); - connection->OnPoke(connection->topic_name, wxString(item_name), connection->buf_ptr, (int)len, wFmt); + connection->OnPoke(connection->m_topicName, wxString(item_name), connection->m_bufPtr, (int)len, (wxIPCFormat) wFmt); return (DDERETURN)DDE_FACK; } else return (DDERETURN)DDE_FNOTPROCESSED; break; @@ -638,7 +657,7 @@ DWORD /* lData2 */) DdeQueryString(DDEIdInst, hsz2, (LPSTR)item_name, sizeof(item_name), CP_WINANSI); - return (DDERETURN)connection->OnStartAdvise(connection->topic_name, wxString(item_name)); + return (DDERETURN)connection->OnStartAdvise(connection->m_topicName, wxString(item_name)); } else return (DDERETURN)0; break; } @@ -652,7 +671,7 @@ DWORD /* lData2 */) char item_name[200]; DdeQueryString(DDEIdInst, hsz2, (LPSTR)item_name, sizeof(item_name), CP_WINANSI); - return (DDERETURN)connection->OnStopAdvise(connection->topic_name, wxString(item_name)); + return (DDERETURN)connection->OnStopAdvise(connection->m_topicName, wxString(item_name)); } else return (DDERETURN)0; break; } @@ -661,12 +680,12 @@ DWORD /* lData2 */) { wxDDEConnection *connection = DDEFindConnection(hConv); - if (connection && connection->sending_data) + if (connection && connection->m_sendingData) { HDDEDATA data = DdeCreateDataHandle(DDEIdInst, - (LPBYTE)connection->sending_data, - connection->data_size, 0, hsz2, connection->data_type, 0); - connection->sending_data = NULL; + (LPBYTE)connection->m_sendingData, + connection->m_dataSize, 0, hsz2, connection->m_dataType, 0); + connection->m_sendingData = NULL; return (DDERETURN)data; } else return (DDERETURN)NULL; break; @@ -682,9 +701,9 @@ DWORD /* lData2 */) DdeQueryString(DDEIdInst, hsz2, (LPSTR)item_name, sizeof(item_name), CP_WINANSI); - DWORD len = DdeGetData(hData, (LPBYTE)(connection->buf_ptr), connection->buf_size, 0); + DWORD len = DdeGetData(hData, (LPBYTE)(connection->m_bufPtr), connection->m_bufSize, 0); DdeFreeDataHandle(hData); - if (connection->OnAdvise(connection->topic_name, wxString(item_name), connection->buf_ptr, (int)len, wFmt)) + if (connection->OnAdvise(connection->m_topicName, wxString(item_name), connection->m_bufPtr, (int)len, (wxIPCFormat) wFmt)) return (DDERETURN)DDE_FACK; else return (DDERETURN)DDE_FNOTPROCESSED; @@ -778,8 +797,8 @@ void DDEPrintError(void) err = "Unrecognised error type."; break; } - MessageBox(NULL, (LPCSTR)err, "DDE Error", MB_OK | MB_ICONINFORMATION); + MessageBox((HWND) NULL, (LPCSTR)err, "DDE Error", MB_OK | MB_ICONINFORMATION); } #endif - // USE_IPC + // wxUSE_IPC