2013-03-26 83 views
2

我有C++共享庫,它爲Linux和Windows導出方法int MyFunc()爲什麼DllImport不適用於「__Internal」?

從C#我打電話MyFunc以下簽名。

[DllImport(@"__Internal", CharSet = CharSet.Ansi, EntryPoint = "MyFunc")] 
static extern unsafe int MyFunc(); 
// Later I'm using : 
MyFunc(); 

此代碼工作正常的Windows但裏面linux此拋出一個異常EntryPointNotFound

我已經使用-rdynamic選項編譯了我的C++庫,我可以看到MyFunc被導出爲D標誌,但是這對我也沒有幫助。

沒有,如果我簡單地改變DllImport(@"__Internal"DllImport(@"mys.so"然後將工作在Linux上很好,但後來我在這打破代碼交叉兼容的窗戶使用DllImport(@"mys.dll"任何變化。
所以我想避免這一點。

我沒有看到任何錯誤,爲什麼__Internal不適用於Linux。
請注意,我正在使用單聲道。

任何想法,爲什麼這不適用於Linux?

回答

5

您可以在Windows和Linux使用此:

[DllImport ("mys")] 

適當延長將根據平臺的加入(這一點也適用於.NET和單聲道)。

+0

謝謝。這已經解決了我的問題。但是你知道它有什麼問題嗎? – 2013-03-26 18:11:07

+1

只有在可執行文件中定義符號時才使用「__Internal」。您似乎有一個動態庫,然後您必須使用庫名稱。 – 2013-03-26 21:24:56

相關問題