Почему DllImport не работает с "__Internal"?
У меня есть общая библиотека C++, метод экспорта int MyFunc()
для Linux и Windows.
Из C# я называю MyFunc
со следующей подписью.
[DllImport(@"__Internal", CharSet = CharSet.Ansi, EntryPoint = "MyFunc")]
static extern unsafe int MyFunc();
// Later I'm using :
MyFunc();
Этот код прекрасно работает на Windows, но внутри Linux это исключение EntryPointNotFound
,
Я скомпилировал свою библиотеку C++ с опцией -rdynamic и вижу, что MyFunc экспортируется как флаг D с nm, но это также не помогло мне.
Без каких-либо изменений, если я просто изменить DllImport(@"__Internal"
в DllImport(@"mys.so"
тогда будет нормально работать на Linux, но тогда я должен использовать DllImport(@"mys.dll"
в окнах, которые нарушают совместимость кода.
Поэтому я хочу избежать этого.
Я не вижу никакой ошибки, почему __Internal
не работает на Linux.
Обратите внимание, что я использую моно.
Есть идеи, почему это не работает в Linux?
1 ответ
Вы можете использовать это как в Windows, так и в Linux:
[DllImport ("mys")]
Соответствующее расширение будет добавлено в соответствии с платформой (и это работает как на.NET, так и на моно).