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();
    }
}
目录
相关文章
|
9天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
23天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
73 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
54 8
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
174 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
46 3
|
2月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue<T>`和`ConcurrentDictionary<TKey, TValue>`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
46 1
|
2月前
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录
|
存储 Ubuntu Linux
【Linux】Python代码模块化
在目录下创建py文件,并进行运行任务要点:python的os和sys系统接口,文件接口
110 0
【Linux】Python代码模块化
|
5天前
|
缓存 监控 Linux
下一篇
无影云桌面