希望應用程式接收一個VC++下的Dll傳遞來的訊息,該訊息宣告為:
UINT nReplyMsg=RegisterWindowMessage(" Custom Message");
在Form中多載Dispatch( )函式,如下:
void __fastcall TDemoDlg::Dispatch(void * Message)
{
PMessage pMsg=(PMessage)Message;
if(pMsg->Msg==(unsigned int)nReplyMsg)
OnReply(pMsg->WParam,pMsg->LParam); //回應訊息函式
TForm::Dispatch(Message);
}
顯示dll呼叫已成功,但程式接收不到發來的訊息,請問如何實作?
用VC寫的接收代碼為:
BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
ON_BN_CLICKED(IDC_CLEAR_PREV_ASK, OnClearPrevAsk)
...
ON_REGISTERED_MESSAGE(nReplyMsg, OnReply)
END_MESSAGE_MAP()
這個處理訊息的陳述句經編譯后是能接收的,說明dll沒有問題。
uj5u.com熱心網友回復:
RegisterWindowMessage 回傳的值 并不是固定的。建議你在VC中宣告一個訊息常量,在另外的程式中也用同樣的值作為訊息IDuj5u.com熱心網友回復:
謝謝指點,但因為Dll沒有原始碼,所以這方面不能改動,只能按照它原來定義的方式接收。uj5u.com熱心網友回復:
既然這樣,那你再確認一下,VC中自定義Windows訊息的字串,和C++Builder中使用的字串必須要一致,多一個空格都不行。就是:RegisterWindowMessage(”Custom Message"); 里的Custom Message因為我看到你在帖子里的這行代碼,Custom前面是有個空格的。先從這里排查一下。uj5u.com熱心網友回復:
訊息字串倒沒錯,就是接收不了訊息,目前還沒有找到CB中應用RegisterWindowMessage()函式處理訊息的示例,沒人用?uj5u.com熱心網友回復:
一個Windows API還找什么示例,只要注冊視窗訊息的字串沒有問題就行了。我想問問,DemoDlg視窗的句柄,正確的傳給DLL了嗎?這個DLL如何知道向哪個視窗發送自定義訊息呢?
uj5u.com熱心網友回復:
有在FormCreate函式中獲得視窗句柄,傳遞給DLL_Init sca; //按照dll定義的引數結構
memset(&sca, 0, sizeof(sca));
sca.m_Head.m_nType = _INIT;
HWND hwnd = Handle;
sca.m_hWnd = hwnd;
sca.m_nMsg = nReplyMsg;
// 呼叫dll初始化函式
bool f=m_Dll.SCInit(&sca, sizeof(sca));
回傳值是true
一般看到的都是自定義常量訊息,我對API也不熟悉,所以還在摸索
uj5u.com熱心網友回復:
有可能要呼叫API函式GetMessage( )來獲得相同MSG型別的訊息,但這個函式在CB中如何使用?uj5u.com熱心網友回復:
我之前也遇到這個問題,沒試出辦法來,最后用其他方式繞開了。Mark下看LZ后續如何解決的
uj5u.com熱心網友回復:
只做到CB編譯的程式相互之間應用變數型自定義訊息進行傳送,跨平臺的沒成功,也準備繞道了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104332.html
上一篇:int **p輸出二維陣列出錯
