2013-03-26 201 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