X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d6906a06a24cf6dd081f1bc955c3255765a0b845..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/msw/dde.cpp diff --git a/src/msw/dde.cpp b/src/msw/dde.cpp index 5b542f7e9b..e2f7ae6f82 100644 --- a/src/msw/dde.cpp +++ b/src/msw/dde.cpp @@ -139,7 +139,7 @@ private: IMPLEMENT_DYNAMIC_CLASS(wxDDEServer, wxServerBase) IMPLEMENT_DYNAMIC_CLASS(wxDDEClient, wxClientBase) -IMPLEMENT_CLASS(wxDDEConnection, wxConnectionBase) +IMPLEMENT_DYNAMIC_CLASS(wxDDEConnection, wxConnectionBase) IMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule) // ============================================================================ @@ -160,7 +160,7 @@ extern void wxDDEInitialize() UINT rc = DdeInitialize(&DDEIdInst, callback, APPCLASS_STANDARD, 0L); if ( rc != DMLERR_NO_ERROR ) { - DDELogError(_T("Failed to initialize DDE"), rc); + DDELogError(wxT("Failed to initialize DDE"), rc); } else { @@ -174,7 +174,7 @@ void wxDDECleanUp() // deleting them later won't work as DDE won't be initialized any more wxASSERT_MSG( wxDDEServerObjects.empty() && wxDDEClientObjects.empty(), - _T("all DDE objects should be deleted by now") ); + wxT("all DDE objects should be deleted by now") ); wxAtomTable.clear(); @@ -327,7 +327,6 @@ wxDDEServer::~wxDDEServer() { wxDDEConnection *connection = node->GetData(); wxDDEConnectionList::compatibility_iterator next = node->GetNext(); - connection->SetConnected(false); connection->OnDisconnect(); // May delete the node implicitly node = next; } @@ -418,7 +417,7 @@ wxConnectionBase *wxDDEClient::MakeConnection(const wxString& WXUNUSED(host), if ( !hszServer ) { - return (wxConnectionBase*) NULL; + return NULL; } @@ -427,7 +426,7 @@ wxConnectionBase *wxDDEClient::MakeConnection(const wxString& WXUNUSED(host), if ( !hszTopic ) { DDEFreeString(hszServer); - return (wxConnectionBase*) NULL; + return NULL; } @@ -457,7 +456,7 @@ wxConnectionBase *wxDDEClient::MakeConnection(const wxString& WXUNUSED(host), } } - return (wxConnectionBase*) NULL; + return NULL; } wxConnectionBase *wxDDEClient::OnMakeConnection() @@ -539,7 +538,7 @@ bool wxDDEConnection::Disconnect() bool ok = DdeDisconnect(GetHConv()) != 0; if ( !ok ) { - DDELogError(_T("Failed to disconnect from DDE server gracefully")); + DDELogError(wxT("Failed to disconnect from DDE server gracefully")); } SetConnected( false ); // so we don't try and disconnect again @@ -554,7 +553,7 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) format == wxIPC_UTF8TEXT || format == wxIPC_UNICODETEXT, false, - _T("wxDDEServer::Execute() supports only text data") ); + wxT("wxDDEServer::Execute() supports only text data") ); wxMemoryBuffer buffer; LPBYTE realData = NULL; @@ -581,7 +580,7 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) if ( conv ) { const char * const text = (const char *)data; - const size_t len = size/sizeof(char); + const size_t len = size; realSize = conv->ToWChar(NULL, 0, text, len); if ( realSize == wxCONV_FAILED ) @@ -594,6 +593,10 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) realSize = conv->ToWChar((wchar_t *)realData, realSize, text, len); if ( realSize == wxCONV_FAILED ) return false; + + // We need to pass the size of the buffer to DdeClientTransaction() and + // not the length of the string. + realSize *= sizeof(wchar_t); } #else // !wxUSE_UNICODE if ( format == wxIPC_UNICODETEXT ) @@ -605,7 +608,7 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) // we could implement this in theory but it's not obvious how to pass // the format information and, basically, why bother -- just use // Unicode build - wxFAIL_MSG( _T("UTF-8 text not supported in ANSI build") ); + wxFAIL_MSG( wxT("UTF-8 text not supported in ANSI build") ); return false; } @@ -624,7 +627,7 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) if ( realSize == wxCONV_FAILED ) return false; - realData = (LPBYTE)buffer.GetWriteBuf(realSize*sizeof(char)); + realData = (LPBYTE)buffer.GetWriteBuf(realSize); if ( !realData ) return false; @@ -636,20 +639,20 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) DWORD result; bool ok = DdeClientTransaction(realData, - realSize, - GetHConv(), - NULL, - // MSDN: if the transaction specified by - // the wType parameter does not pass data - // or is XTYP_EXECUTE, wFmt should be zero. - 0, - XTYP_EXECUTE, - DDE_TIMEOUT, - &result) != 0; + realSize, + GetHConv(), + NULL, + // MSDN: if the transaction specified by + // the wType parameter does not pass data + // or is XTYP_EXECUTE, wFmt should be zero. + 0, + XTYP_EXECUTE, + DDE_TIMEOUT, + &result) != 0; if ( !ok ) { - DDELogError(_T("DDE execute request failed")); + DDELogError(wxT("DDE execute request failed")); } return ok; @@ -669,7 +672,7 @@ const void *wxDDEConnection::Request(const wxString& item, size_t *size, wxIPCFo &result); if ( !returned_data ) { - DDELogError(_T("DDE data request failed")); + DDELogError(wxT("DDE data request failed")); return NULL; } @@ -678,7 +681,7 @@ const void *wxDDEConnection::Request(const wxString& item, size_t *size, wxIPCFo void *data = GetBufferAtLeast(len); wxASSERT_MSG(data != NULL, - _T("Buffer too small in wxDDEConnection::Request") ); + wxT("Buffer too small in wxDDEConnection::Request") ); (void) DdeGetData(returned_data, (LPBYTE)data, len, 0); (void) DdeFreeDataHandle(returned_data); @@ -845,7 +848,7 @@ _DDECallback(WORD wType, void *data = connection->GetBufferAtLeast(len); wxASSERT_MSG(data != NULL, - _T("Buffer too small in _DDECallback (XTYP_EXECUTE)") ); + wxT("Buffer too small in _DDECallback (XTYP_EXECUTE)") ); DdeGetData(hData, (LPBYTE)data, len, 0); @@ -926,7 +929,7 @@ _DDECallback(WORD wType, void *data = connection->GetBufferAtLeast(len); wxASSERT_MSG(data != NULL, - _T("Buffer too small in _DDECallback (XTYP_POKE)") ); + wxT("Buffer too small in _DDECallback (XTYP_POKE)") ); DdeGetData(hData, (LPBYTE)data, len, 0); @@ -1013,7 +1016,7 @@ _DDECallback(WORD wType, void *data = connection->GetBufferAtLeast(len); wxASSERT_MSG(data != NULL, - _T("Buffer too small in _DDECallback (XTYP_ADVDATA)") ); + wxT("Buffer too small in _DDECallback (XTYP_ADVDATA)") ); DdeGetData(hData, (LPBYTE)data, len, 0); @@ -1063,9 +1066,9 @@ The returned handle has to be freed by the caller (using */ static HSZ DDEAtomFromString(const wxString& s) { - wxASSERT_MSG( DDEIdInst, _T("DDE not initialized") ); + wxASSERT_MSG( DDEIdInst, wxT("DDE not initialized") ); - HSZ hsz = DdeCreateStringHandle(DDEIdInst, (wxChar*)s.wx_str(), DDE_CP); + HSZ hsz = DdeCreateStringHandle(DDEIdInst, wxMSW_CONV_LPTSTR(s), DDE_CP); if ( !hsz ) { DDELogError(_("Failed to create DDE string")); @@ -1105,7 +1108,7 @@ static void DDELogError(const wxString& s, UINT error) error = DdeGetLastError(DDEIdInst); } - wxLogError(s + _T(": ") + DDEGetErrorMsg(error)); + wxLogError(s + wxT(": ") + DDEGetErrorMsg(error)); } static wxString DDEGetErrorMsg(UINT error)