2016-10-27 93 views
-1

我目前正在編寫一個C#應用程序,它使用C++/CLI來利用C編寫的庫,它不是由我自己創建的。這個庫被編譯成一個DLL,然後在C++項目中引用,在C++包裝器中(我知道的很長時間)。使用DLL編譯使用不同的編譯器

這是問題所在;如果我使用MinGW將C庫編譯爲DLL(GCC makefile隨庫提供),那麼代碼將按照原樣工作,並生成正確的輸出(通過命令行進行測試)。但是,如果我將所有庫頭文件和源文件包含到Visual Studio中的C項目中,並使用MSVC編譯器進行編譯,那麼我會在庫代碼內部深入一個Read Access Violation

現在我可以(也可能應該)調試庫來找出問題的具體內容,但是它的編寫水平相當低,我沒有多少經驗;所以我的問題是,如果我使用MinGW將庫編譯爲DLL,然後在使用MSVC編譯的項目中引用該DLL,是否可以解決問題?

+0

是不是[平臺調用](https://msdn.microsoft.com/en-us/library/aa288468(v = vs.71).aspx)在這種情況下更好? –

+0

試試看看。 –

+0

@VisualVincent我確實嘗試過使用PInvoke,但是我無法讓我的生活得到它的工作。所以我爲C代碼編寫了一個快速C++包裝器,並且C++/CLI幾乎立即工作。 –

回答

1

聽起來就像你在路上。這是您成爲專家開發人員的機會 - 沒有捷徑。通過Visual Studio中的代碼,當你遇到你不明白的代碼時,調查。如果您花費超過2小時試圖瞭解具體的事情,請稍事休息,調查您的調查(即嘗試遵循不同的領導,嘗試不同的搜索詞)。儘可能繼續下去,不要讓自己陷入困境。 C語言特別透明 - 沒有魔法。你能行的。你會很高興你做到了。特別是理解C是值得的。任何東西。任何你可以用C語言完成(解釋)的代碼。 C是計算機語言的羅塞塔石。開始吧。讓我們知道怎麼回事。