Macos Mono DLL打开相应的Windows/Mac DLL/DyLib
我使用Mono在一组本机公开的命令上编写包装器 该集合是相同的(命令和签名),但是它是通过Windows中的DLL和Mac中的动态库公开的 我想知道是否有一种方法可以让我只创建一个包装器.NET/Mono DLL,同时让它自己找到正确的库来导入 如果是,语法是什么?如果不是,将DllImport与我要编译的2个不同操作系统分开的编译器定义是什么 编辑:Mac部分的静态库(.a)而不是动态库(.dylib)的加分,如果这在Mono中是可能的话。Macos Mono DLL打开相应的Windows/Mac DLL/DyLib,macos,mono,native,dllimport,dylib,Macos,Mono,Native,Dllimport,Dylib,我使用Mono在一组本机公开的命令上编写包装器 该集合是相同的(命令和签名),但是它是通过Windows中的DLL和Mac中的动态库公开的 我想知道是否有一种方法可以让我只创建一个包装器.NET/Mono DLL,同时让它自己找到正确的库来导入 如果是,语法是什么?如果不是,将DllImport与我要编译的2个不同操作系统分开的编译器定义是什么 编辑:Mac部分的静态库(.a)而不是动态库(.dylib)的加分,如果这在Mono中是可能的话。 #define MAC/WINDOWS 及 在代码
#define MAC/WINDOWS
及
在代码内部。
编译时使用-define WINDOWS或-define MAC,以便调用DLL。因此,至少您将有一个代码库,或者您需要检查环境,但这很容易变得棘手。您可能希望提供一个dll映射配置文件,告诉Mono在每个平台上加载哪个库:
如果可以为两个库指定相同的名称,则根本不需要更改代码。至少对我来说,在Windows/Linux环境下,本机库是用C编写的。更简单,但jpobst的答案可能更合适+1尽管如此。是的,这种方法可能适用于库,它是项目的内部部分,因此不共享。但是在mono应用程序中使用@executable_path时要小心-它返回mono二进制文件本身的路径,而不是.EXE可执行文件。
#if