使用C++,我花了很多時間已經嘗試解決這個問題。這段代碼來自一個工作程序,我用C#重寫了它,但是有些事情我不明白。C++ SendMessage嘗試接收字符串
下面的代碼正是我按「Step Into」時運行的代碼。它是如何從:: SendMessage(...)到:: OnCopyData(..)與pCopyDataStruct現在包含數據?
的main.cpp
void COTP::main()
{
//string will be returned using WM_COPYDATA message
::SendMessage(hWnd, 33508, (WPARAM)GetSafeHwnd(), 11);
// WPARAM is a typedef for UINT_PTR which is an unsigned int.
}
afxwin2.inl
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{ return this == NULL ? NULL : m_hWnd; }
的main.cpp
BOOL COTP::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
CString str, str2;
switch (pCopyDataStruct->dwData)
{
case JRC_COPYDATA_ID_TRACK_FILENAME:
str = (LPCTSTR)pCopyDataStruct->lpData;
break;
}
}
任何幫助超級讚賞,我已經看過直通所有MSDN文檔,我可以今晚,它看起來像我在某處丟失了簡單的東西。認爲這可能是一個回調,但這似乎並不正確。
當您在調試器中的OnCopyData中時,您的堆棧看起來像什麼? –
您需要了解Windows消息泵(SendMessage將打入Windows的呼叫,並且最終的功能取決於泵在應用程序中的連接方式)以及MFC如何設計使用它們。 「未記錄的MFC」一書很好地解釋了這一點。 –
調用堆棧是我所需要的,謝謝。 LRESULT CALLBACK是第一個:)。這部分看起來可能需要一段時間才能轉換爲C#。 – Drew