2011-07-01 41 views
0

我在我的項目中使用純C與Windows SDK,但現在我需要處理DVR的攝像頭,驅動程序是在MFC 6.0中生成的。使用沒有MFC的MFC庫

我可以隨時切換到C++(我已經在某些模塊中使用它),但在這個相機SDK中,我需要CWnd的對象。

//Initialize is a function, which initializes the related SDK instance. 
Void Initialize(CWnd* pParent) 

我可以創建一個假的CWnd,無需加載MFC的東西到MFC項目,但只是用我的純CreateWindowEx()?

謝謝。

+0

你有圖書館的來源嗎?你可能會僞造它。如果它唯一要做的就是獲取CWnd :: m_hWnd或調用Cwnd :: GetSafeHwnd,那麼可以創建一個返回實際HWND的虛擬Cwnd類。但是,如果它使用Cwnd的成員函數的嵌套混亂,你可能會掉下兔子洞... – CoreyStup

+0

不,我沒有。但我知道這個庫使用Cwnd創建與這個HWND相關的線程(用於相機)。但我可以試試!我怎樣才能創建這個虛擬CWnd? –

+0

看看https://openmfc.codeplex.com/ - 它是MFC的開源版本。 –

回答

1

CWnd只是一個窗口句柄的包裝,可能只有SDK函數使用的方法是獲取父窗口句柄。您可以嘗試翻轉CWnd的所有繼承分支和依賴項,以便使用所有數據和方法來模擬對象,而無需使用實際的MFC,但我想這將是一個真正的麻煩。 也許你將不得不創建一些簡單的MFC層,比如dll,它會從你的代碼中取出HWND句柄,然後把它包裝到CWnd中,然後調用相機SDK。您可能需要使用相同版本的VC++ 6.0來創建一個圖層,以使其與您擁有的舊庫一起工作。

1

如果SDK有一個函數需要一個CWnd,那麼它可能已經靜態鏈接到MFC。這意味着您的項目現在依賴於客戶端計算機上的MFC dll。由於你現在綁定到MFC,你可能會咬緊牙關並創建一個靜態鏈接到MFC的MFC項目。我建議創建一個簡單的控制檯MFC項目並從那裏開始工作。