为什么 DllImport 不适用于"__Internal"?

Why DllImport doesnt work with "__Internal"?

本文关键字:Internal 适用于 DllImport 不适用 为什么      更新时间:2023-10-16

我有一个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中这抛出一个异常EntryPointNotFound

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

没有任何改变,如果我只是改变DllImport(@"__Internal"DllImport(@"mys.so",那么将工作在linux上很好,但然后我必须使用DllImport(@"mys.dll"在windows这打破了代码交叉兼容的功能。
所以我想避免这个

我不明白为什么__Internal不能在Linux上工作。
注意,我使用的是单声道。

您可以在windows和linux上使用:

[DllImport ("mys")]

将根据平台添加适当的扩展名(这在。net和mono上都有效)