我在Google中找到了很多關於如何從.NET代碼調用非託管DLL中的API函數的示例,但是如何從非託管代碼實例化對象呢?從.NET實例化非託管類
我目前正在修補一箇舊的遺留應用程序在工作中(並且我還不確定我們是否能夠做任何事情,但是修補程序和研究我必須)該公司希望遷移到.NET。看起來這是之前嘗試過的,現在我正在仔細研究。最常見的編譯錯誤是對項目不理解的舊DLL的引用。
在這一行代碼的一個例子是:
Dim cAccounts As HSVMETADATALib.HsvAccounts
有一個損壞的引用在項目庫中,我相信這是一些嚮導驅動的嘗試的結果,只是口一定預.NET項目到.NET。我有它尋找DLL,但添加到它的引用返回錯誤:
A reference to 'HFMConstants.dll' could nto be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
現在,我知道什麼這個DLL。而且我有很多很有 pre.NET Windows編程的經驗。因此,我一直在網上尋找有關在此代碼中使用舊DLL的信息,並且都側重於調用DLL中的API函數。但是,仔細查看這些代碼,關於API函數和更多關於對象的內容就更少了。那麼我將如何去實例化這些對象之一的實例呢?
(請注意,這是其中一種情況,我們甚至不知道我們是否有正確的源代碼,沒有文檔,沒有任何關於此應用程序的所有權和維護的內容,能夠實例化來自外部DLL的對象的障礙是來自某些未知且可能無法訪問的第三方來源,它將減少大部分編譯器錯誤並幫助我們進入更多的代碼,即使獲得至少一個編譯精簡版。)
這是模糊的,但它是值得一問:)
我喜歡這個Dependency Walker,漂亮的小工具。當然,這一個樣本DLL有一個大型的依賴關係樹(其中一些沒有找到,我想這將是另一個有趣的路障)。我不確定這裏面的信息對於這項工作特別有用,但我現在可以放心地忽略。 – David 2010-08-19 17:02:45