X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2ec2e91e99cb031e03882ab9e97a2a6b1f51034c..404b319a85dadd7decf7a5a5331020520031a41c:/src/msw/dde.cpp?ds=sidebyside diff --git a/src/msw/dde.cpp b/src/msw/dde.cpp index 21d8f02c2e..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) // ============================================================================ @@ -580,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 ) @@ -593,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 ) @@ -623,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; @@ -635,7 +639,7 @@ wxDDEConnection::DoExecute(const void *data, size_t size, wxIPCFormat format) DWORD result; bool ok = DdeClientTransaction(realData, - realSize*sizeof(wxChar), + realSize, GetHConv(), NULL, // MSDN: if the transaction specified by @@ -1064,7 +1068,7 @@ static HSZ DDEAtomFromString(const wxString& s) { 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"));