簡體   English   中英

是否可以將成員函數傳遞給QueueUserAPC?

[英]Is it possible to pass a member function to QueueUserAPC?

有可能或解決方法將成員函數傳遞給Windows API函數QueueUserAPC()?

好的,我可以傳遞一個靜態成員函數。 但那時我將無法完全訪問本地成員變量......

那么是否有可能將兩者結合起來,作為成員函數傳遞和完全訪問非靜態成員變量? 我試圖找出與相關的解決方案但尚未成功。

希望有人有想法解決這個問題。

這是一種在C風格的回調調用C ++函數時使用的標准模式。

您創建一個轉發呼叫的免費功能(或靜態成員)...

VOID CALLBACK ForwardTo_MyClass_func( _In_  ULONG_PTR dwParam )
{
    auto* p = (MyClass*)dwParam;
    p->func();
}

...然后通過將實例指針作為第三個參數傳遞給QueueUserAPC來進行設置:

QueueUserAPC( ForwardToMyClass_func, hThread, (ULONG_PTR)pMyClass );

如果需要進一步的參數,則必須創建某種結構來保存實例指針和參數。

答案是不。 Windows API具有C接口,因此無法處理名稱受損的簽名,例如C ++成員函數。 您傳遞的功能必須是C風格的免費功能。

順便說一句,如果可擴展性較低,則將其嵌套在命名空間中是可以接受的:

namespace apc_stuff
{
    static MyStruct some_static_data;

    static void __stdcall MyApcFunc(ULONG_PTR data); // PAPCFUNC
};

using namespace apc_stuff;

MyClass::DoSomething(...)
{
    auto my_data = new MyData(...);

    auto data = reinterpret_cast<ULONG_PTR>(my_data);

    QueueUserAPC(MyApcFunc, hThread, data)
}

/*static*/ void __stdcall apc_stuff::MyApcFunc(ULONG_PTR data)
{
    auto my_data = reinterpret_cast<MyData *>(data);

    // 
    // use my_data
    // use some_static_data
    // 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM