为什么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和单声道)。