IMPLEMENT_DYNAMIC_CLASS(wxDDEServer, wxServerBase)
IMPLEMENT_DYNAMIC_CLASS(wxDDEClient, wxClientBase)
-IMPLEMENT_CLASS(wxDDEConnection, wxConnectionBase)
+IMPLEMENT_DYNAMIC_CLASS(wxDDEConnection, wxConnectionBase)
IMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule)
// ============================================================================
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
{
// 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();
{
wxDDEConnection *connection = node->GetData();
wxDDEConnectionList::compatibility_iterator next = node->GetNext();
- connection->SetConnected(false);
connection->OnDisconnect(); // May delete the node implicitly
node = next;
}
if ( !hszServer )
{
- return (wxConnectionBase*) NULL;
+ return NULL;
}
if ( !hszTopic )
{
DDEFreeString(hszServer);
- return (wxConnectionBase*) NULL;
+ return NULL;
}
}
}
- return (wxConnectionBase*) NULL;
+ return NULL;
}
wxConnectionBase *wxDDEClient::OnMakeConnection()
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
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 wxDUMMY_INITIALIZE(NULL);
- size_t realSize wxDUMMY_INITIALIZE(0);
+ LPBYTE realData = NULL;
+ size_t realSize = 0;
wxMBConv *conv = NULL;
// Windows only supports either ANSI or UTF-16 format depending on the
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 )
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 )
// 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;
}
if ( realSize == wxCONV_FAILED )
return false;
- realData = (LPBYTE)buffer.GetWriteBuf(realSize*sizeof(char));
+ realData = (LPBYTE)buffer.GetWriteBuf(realSize);
if ( !realData )
return false;
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;
&result);
if ( !returned_data )
{
- DDELogError(_T("DDE data request failed"));
+ DDELogError(wxT("DDE data request failed"));
return NULL;
}
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);
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);
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);
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);
*/
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"));
error = DdeGetLastError(DDEIdInst);
}
- wxLogError(s + _T(": ") + DDEGetErrorMsg(error));
+ wxLogError(s + wxT(": ") + DDEGetErrorMsg(error));
}
static wxString DDEGetErrorMsg(UINT error)