LINUX C# 加载本地库的范例代码

简介: LINUX C# 加载本地库的范例代码

网上搜索了一下,有人提供了办法,测试通过:

public partial class MainWindow : Gtk.Window
{
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
    }
    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        Application.Quit();
        a.RetVal = true;
    }
    const string NATIVE_PATH = "./libtioplugininterface.so";
    const string NATIVE_INIT = "init";
    [DllImport("libdl.so")]
    protected static extern IntPtr dlopen(string filename, int flags);
    [DllImport("libdl.so")]
    protected static extern IntPtr dlsym(IntPtr handle, string symbol);
    [DllImport("libdl.so")]
    protected static extern IntPtr dlclose(IntPtr handle);
    const int RTLD_NOW = 2; // for dlopen's flags
    private delegate int native_init(int param);
    static bool NativeInit()
    {
        IntPtr hModule = dlopen(NATIVE_PATH, RTLD_NOW);
        if (hModule.Equals(IntPtr.Zero))
        {
            Console.WriteLine("LoadLibrary fail=" + NATIVE_PATH);
            return false;
        }
        Console.WriteLine("dlopen() OK");
        IntPtr address = dlsym(hModule, NATIVE_INIT);
        if (address == IntPtr.Zero)
        {
            Console.WriteLine("GetProcAddress fail=" + NATIVE_INIT);
            return false;
        }
        Console.WriteLine("dlsym() OK");
        Delegate proc = Marshal.GetDelegateForFunctionPointer(address, typeof(native_init));
        int result = ((native_init)proc)(0);
        Console.WriteLine("native_init() OK");
        dlclose(hModule);
        return true;
    }
    protected void OnButton2Pressed(object sender, EventArgs e)
    {
        this.button2.Visible = false;
        NativeInit();
    }
}
目录
相关文章
|
2月前
|
安全 Linux 网络安全
Linux使用HTTP隧道代理代码示例模版
Linux使用HTTP隧道代理代码示例模版
20 0
|
3月前
|
自然语言处理 数据挖掘 Linux
ModelScope问题之拷贝到内网linux系统运行代码报错如何解决
本合集将提供ModelScope安装步骤、配置要求和环境准备,以便用户顺利启动ModelScope进行模型开发和测试。
68 0
|
4月前
|
Linux
linux内核学习(一):linux 内核镜像生成与加载
linux内核学习(一):linux 内核镜像生成与加载
62 0
|
2月前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
74 0
|
2月前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
37 1
|
4月前
|
消息中间件 Kubernetes NoSQL
Linux时间校准(ntpdate及NTP客户端代码校准示例)
Linux时间校准(ntpdate及NTP客户端代码校准示例)
|
2月前
|
Linux Shell 文件存储
【Shell 命令集合 系统设置 】Linux 加载和卸载内核模块 modprobe命令 使用指南
【Shell 命令集合 系统设置 】Linux 加载和卸载内核模块 modprobe命令 使用指南
54 1
|
2月前
|
安全 Linux 开发者
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
87 1
|
5天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
|
8天前
|
安全 Unix Linux
Linux:开源之美与代码之韵
Linux:开源之美与代码之韵
19 1