为什么DllImport不能与“__Internal”一起使用?

我有C ++共享库,它为Linux和Windows提供了导出方法int MyFunc()

从C#开始,我会使用以下签名调用MyFunc

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

这段代码在Windows上工作正常但在linux内部这会抛出exception的EntryPointNotFound

我用-rdynamic选项编译了我的C ++库,我可以看到MyFunc被导出为带有nm的D标志,但这对我没有帮助。

没有任何改变,如果我只是改变DllImport(@"__Internal"DllImport(@"mys.so"那么在linux上工作正常但是我必须在Windows中使用DllImport(@"mys.dll"这会破坏代码交叉兼容特征。
所以我想避免这种情况。

我没有看到为什么__Internal不能在Linux上工作的任何错误。
请注意,我正在使用单声道。

知道为什么这不适用于Linux吗?

你可以在windows和linux上使用它:

 [DllImport ("mys")] 

将根据平台添加适当的扩展(这适用于.NET和单声道)。