場景: 我有一個C++ DLL。 在這個DLL中,我創建了一個工作線程。 在工作線程中,我有一個等待用戶通過USB硬件設備輸入的循環。 僅當USB設備上的用戶輸入符合某些標準時,循環纔會結束。 此外,我需要實時反饋USB設備的用戶使用情況反饋以顯示在屏幕上。 它使用Delphi GUI進行反饋。從工作線程調用主線程回調函數
當用戶使用USB設備時,Windows系統會生成回調函數。此回調函數被寫入相同的C++ DLL文件,並作爲USB設備的初始化函數中的參數傳入。
我在DLL中使用了一個全局變量作爲標誌來確定何時該循環必須退出。
我也從Delphi DLL加載這個C++ DLL。 Delphi DLL - > C++ DLL 反饋顯示來自Delphi DLL。
基本上,我現在面臨的問題是函數ptr,funcptr根本無法調用。屏幕上沒有實時反饋。這是Delphi DLL中的一個函數。 這是代碼行:
(*(reinterprete_cast<FUNCPTR>(funcPtr)))("this is the feedback msg displayed on Delphi GUI");
有沒有人有一個解決方案?
我是新手,很欣賞任何答案。謝謝您的幫助。
//Global variable
BOOL flag = TRUE;
//A function type in Delphi calling app
typedef void (__stdcall *FUNCPTR)(PCHAR);
//Functions start here.....
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
do {} while (flag);
}
function_1st_CalledFromDelphiDLL(FUNCPTR funcPtr)
{
Initialize_USBDevice(handleUSBDeviceEvent_callback, funcPtr);
}
function_2nd_CalledFromDelphiDLL()
{
DWORD threadID;
HANDLE hWorkerThread;
hWorkerThread = CreateThread(NULL,0,ThreadProc, 0, 0 , &threadID);
if (hWorkerThread!=NULL)
{
WaitForSingleObject(hWorkerThread, 30000);
}
}
//This is the callback function, called by Windows system when user meddles with the USB device
handleUSBDeviceEvent_callback(void *funcPtr)
{
flag = FALSE; //so loop in ThreadProc can exit
//The following code cannot be executed at all. Even when i Try MessageBox(NULL,L"msg",NULL,NULL), the message box doesn't popup too. But, I can write something to a filestream here.
(*(reinterprete_cast<FUNCPTR>(funcPtr)))("this is the feedback msg displayed on Delphi GUI");
}
我已添加代碼。用戶輸入是一個USB傳感器設備。 – Robogal 2010-07-28 07:43:45