MyClass是一個單例類(在我的整個程序中將只有這些類中的一個)。函數指針 - 模棱兩可的符號錯誤
我想要做的事情如下。
- 使用AddData將數據添加到我的類中,獲取返回的函數指針,然後可以將它傳遞給dll中的「另一個」函數。
- 那麼這個「其他」函數調用我的回調函數
我的班級像這樣。
typedef void (*DataReceivedCallback)(int, int);
class MyClass
{
MyClass();
~MyClass();
void AddData(int sourceId, DataReceivedCallback &callback);
static void MyCallBackFunction(int var1, int var2);
};
void MyClass::AddData(int sourceId, DataReceivedCallback &callback)
{
callback = &MyCallBackFunction;
}
void MyClass::MyCallBackFunction(int var1, int var2)
{
//do something blah blah
}
我可以再做:
int main()
{
DataReceivedCallback callback;
MyClass->GetInstance()->AddData(1, callback);
callback(1,100);
}
當我一步通過這次我看到,我的確步入回調MyCallBackFunction這就是我想要的東西:)
我再想現在要做的就是將main中定義的「回調」傳遞給一個dll函數,該函數將回調到我的回調函數中。
我有的DLL的代碼,所以我想修改一個,如果它的功能,以便它接受我的回調函數參數。
我在DLL函數簽名這樣做:
void * someDllFunction(int var1, int var2, DataReceivedCallback& callback)
{
callback(2, 200);
}
但我得到的錯誤: 錯誤C2872: 'DataReceivedCallback':不明確的符號
我該如何解決這個問題? 這是否只能被允許跨越dll邊界使用c-style參數?
我不明白整個安裝:你說你只想要一個*你* singleton類'MyClass'的實例,但你有這個過於複雜的方案,以返回一個指向它的成員函數。爲什麼?如果只有一個這樣的實例和一個這樣的類,爲什麼這種間接?爲什麼有一個函數'AddData' - 它沒有添加任何東西! –