通过.net core调用so文件的方法

 更新时间:2023年08月25日 09:10:01   作者:sinnoSong  
工作中需要在linux上监控系统空闲时间,但是没有找到C#代码,只找到C的代码,所以准备将C文件编译为so然后用P/invoke调用,这篇文章主要介绍了如何通过.net core调用so文件,需要的朋友可以参考下

如何通过.net core调用so文件

工作中需要在linux上监控系统空闲时间,但是没有找到C#代码,只找到C的代码,所以准备将C文件编译为so然后用P/invoke调用。

代码

C代码和编译

#include <X11/extensions/scrnsaver.h>
#include <stdio.h>
int main(void) {
    printf("%u\n", getIdleTime());
}
int getIdleTime(){
    Display *dpy = XOpenDisplay(NULL);
    if (!dpy) {
        return(1);
    }
    XScreenSaverInfo *info = XScreenSaverAllocInfo();
    XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info);
    return info->idle;
}

要编译上述代码需要先安装libX11-devel库
编译命令:

gcc getIdle.c -fPIC -shared -o getIdle.so  -lXss -lX11

C#代码

internal class Program
    {
        [DllImport("getIdle.so", EntryPoint = "getIdleTime")]
        private static extern IntPtr getIdleTime();
        static void Main(string[] args)
        {
            var after = DateTime.Now.AddSeconds(10);
            while (after >= DateTime.Now)
            {
                Console.WriteLine(GetIdleTime());
                Thread.Sleep(1000);
            }
        }
        /// <summary>
        /// 调用getIdle.so获取系统空闲时间
        /// </summary>
        /// <returns></returns>
        internal static int GetIdleTime()
        {
            return getIdleTime().ToInt32();
        }
    }

编译生成后,将程序文件夹中的文件复制到linux上,并将so文件放到程序目录下。使用bashdotnet Test.dll命令运行程序,可以看到能够正常调用so文件。

到此这篇关于如何通过.net core调用so文件的文章就介绍到这了,更多相关.net core调用so文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • .NET8 依赖注入

    .NET8 依赖注入

    依赖注入是一种设计模式,用于解耦组件(服务)之间的依赖关系,它通过将依赖关系的创建和管理交给外部容器来实现,而不是在组件(服务)内部直接创建依赖对象,本文介绍.NET8 依赖注入的相关知识,感兴趣的朋友一起看看吧
    2023-12-12
  • asp.net实现识别客户端浏览器或操作系统

    asp.net实现识别客户端浏览器或操作系统

    这里给大家汇总了使用asp.net实现识别客户端浏览器或操作系统的方法和示例代码,有需要的小伙伴可以参考下。
    2015-10-10
  • ASP.NET中如何实现回调

    ASP.NET中如何实现回调

    这篇文章主要为大家详细介绍了ASP.NET中如何实现回调操作,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • .net搜索查询并实现分页实例

    .net搜索查询并实现分页实例

    .net搜索查询并实现分页实例,需要的朋友可以参考一下
    2013-03-03
  • .NET中SqlSugar使用教程小结

    .NET中SqlSugar使用教程小结

    SqlSugar是是一款基于.NET的高性能ORM框架,支持多数据库操作,支持CodeFirst/DbFirst,本文就来详细的介绍一下SqlSugar使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • .NET 2.0 的压缩功能代码

    .NET 2.0 的压缩功能代码

    .NET 2.0 的压缩功能代码...
    2007-04-04
  • Asp.net response对象与request对象使用介绍

    Asp.net response对象与request对象使用介绍

    这篇文章主要介绍了Asp.net response对象与request对象使用,需要的朋友可以参考下
    2014-04-04
  • ASP.NET页面传递值的方式介绍

    ASP.NET页面传递值的方式介绍

    面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer。
    2012-12-12
  • ASP.NET MVC 从IHttp到页面输出的实例代码

    ASP.NET MVC 从IHttp到页面输出的实例代码

    MVCHandler应该算是MVC真正开始的地方。MVCHandler实现了IHttpHandler接口,ProcessRequest便是方法入口
    2013-09-09
  • Quartz.NET的具体使用

    Quartz.NET的具体使用

    本文详细的介绍了Quartz.NET的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论