2014-06-13 23 views
0

我有一箇舊的MFC代碼,我想從我的託管C#WPF .Net應用程序調用。爲了封裝本地代碼,我發現我可以使用1)P/Invoke 2)C++/CLI或3)COM。在託管代碼中使用包裝MFC本機代碼

但我還有一個擔心。我讀過你必須構建MFC擴展DLL,只要它包含從MFC派生的類。此外,這個DLL的調用方必須是一個MFC環境,我認爲這意味着這個DLL在我的託管代碼中不可行。

在我的應用程序中,我有從基類MFC類派生的類。我使用文檔視圖體系結構,並且我的Doc,View,MainFrame,App類是從MFC類派生的。這是否意味着我除了構建MFC擴展DLL之外無其他選擇,並且在託管應用程序中無法使用此DLL。 有什麼建議如何解決這個問題?

+0

我正在考慮重寫沒有MFC的本地代碼。它會有幫助嗎?我希望能夠將它編譯爲一個dll,並從我的C#.Net應用程序中調用該dll。 – user2654449

+1

Pinvoke不太可能有用,它不能調用C++方法。由於您現有的代碼不是COM可調用的,因此COM往往會遠離深層。這留下了C++/CLI,通常是最好的選擇。所有關於擴展DLL的普通MFC hoopla都適用,沒有區別。 –

+0

@HansPassant,但是當從託管代碼引用時不能使用MFC擴展DLL? 我想確定是否需要擺脫我的本機代碼中的MFC部分,並使用WinAPI將其重寫爲Windows應用程序 – user2654449

回答

1

爲什麼不將MFC代碼封裝在MFC ActiveX項目中並使用互操作性從您的託管代碼應用程序調用它?對我來說似乎是最簡單的解決方案。