我有一個用VC++ 6編寫的原生動態鏈接庫,我沒有訪問源代碼的權限。我想將其轉換爲託管代碼,以便C#可以調用此庫。問題在於VC6庫大量使用std :: vector和std :: string作爲函數參數,並且沒有辦法將這些類型直接封裝到C#中。如何從C#調用原生VC++ 6庫(使用std :: string作爲參數)#
所以我需要的是VC6和C#之間的橋樑,並且我爲VC++ 6實現了一個VC++ 2005包裝器。但是,我從回覆(通過jalf)意識到以下線程:「VC++ 6和VC++ 2005有不同的std :: string定義(並且編譯器也可能插入不同的填充和其他更改),結果是垃圾,和/或不可預知的行爲和崩潰「。
Passing std::string from VC++2005 to VC++6 DLL results in garbage
所以現在,最大的問題是,我怎麼能調用從C#在VC++ 6本地庫?
我很茫然,任何幫助,非常感謝。
這聽起來像在第一個很好的解決方案,但你如何轉換這種複雜類型std :: vector到其他可以從C/P調用的東西? –
Lopper
2009-11-27 01:49:22
如果你只需要傳遞它,'const char **'(即chars的動態數組的動態數組)就可以做到這一點(使用'CoTaskMemAlloc',並要求調用者釋放它)。 – 2009-11-27 01:53:52
另一種方式,在VC++ 6中編寫的「橋接/包裝器」dll想要將char **傳遞迴C#?在這種情況下,內存不能被釋放,因爲C#不能這樣做。 – Lopper 2009-11-27 02:09:35