2012-01-26 84 views
1

我正在構建一個構建AST的C解釋器(用C++編寫)。我想讓用戶有機會與真正的DLL進行通信。例如:我從DLL調用函數。這個函數需要一個指向函數的指針(回調)。有問題:我沒有真正的地址給一個函數,因爲我想給DLL函數的函數只存在於我的AST中的節點。有沒有辦法解決這個問題?我想過使用內置於我的解釋器中的類似代理的函數,它將委託給我的AST中的函數。問題是,代理函數必須具有相同的簽名才能從DLL函數中調用...並且我無法在運行時創建動態函數。解釋器中的函數指針

+0

我聞到一項家庭作業。 – Brian

+0

不,這是錯誤的;) – dcast

+0

你可以保存用戶給定的指針(它只是一個AST節點),向DLL傳遞一個指向轉發函數的函數指針,然後當轉發函數被調用時,它會激活代碼將執行用戶給出的AST節點。這有道理,看起來有可能嗎? –

回答

1

你沒有具體說明你正在嘗試使用哪個API/dll,但是它們中的大多數提供了與用戶數據一起提供的void *(或在窗口上的LPVOID),其與回調函數指針一起提供,並且將被傳遞給回調函數,以及適用於回調的任何其他參數。

你可以做的是傳遞一個指針到您的AST,因爲這額外的指針,並寫出它將該void *回一個AST *,然後調用上AST你解釋實際回調的小包裝函數。

+0

聽起來不錯。我想我會試試:)。謝謝你們 – dcast