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

 更新时间:2023年08月25日 09:10:01   作者:sinnoSong  
工作中需要在linux上监控系统空闲时间,但是没有找到C#代码,只找到C的代码,所以准备将C文件编译为so然后用P/invoke调用,这篇文章主要介绍了如何通过.net core调用so文件,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

如何通过.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文件内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 使用.NET Core创建exe应用程序

    使用.NET Core创建exe应用程序

    这篇文章介绍了使用.NET Core创建exe应用程序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • asp.net基础学习之控件的使用方法

    asp.net基础学习之控件的使用方法

    这篇文章主要为大家详细介绍了asp.net基础学习之控件的使用方法,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • ASP.net(c#) 生成html的几种解决方案[思路]

    ASP.net(c#) 生成html的几种解决方案[思路]

    下面的文章转载自网络,其代码很多都有问题,这里只提供给大家一个思路.
    2009-05-05
  • .NET中创建对象的几种方式和对比

    .NET中创建对象的几种方式和对比

    在 .net 中,创建一个对象最简单的方法是直接使用 new (), 在实际的项目中可能还会用到反射,本文就介绍了几种创建方法,感兴趣的可以了解一下
    2021-07-07
  • updatepanel用法之triggers使用示例

    updatepanel用法之triggers使用示例

    triggers有的两种触发器asyncpostbacktrigger和postbacktrigger,下面是使用示例,需要的朋友可以参考下
    2014-03-03
  • linq中的转换操作符

    linq中的转换操作符

    这篇文章介绍了linq中的转换操作符,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • ASP.NET MVC5验证系列之客户端验证

    ASP.NET MVC5验证系列之客户端验证

    这篇文章主要为大家详细介绍了ASP.NET MVC5验证系列之客户端验证,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • asp.net字符串处理类代码

    asp.net字符串处理类代码

    asp.net字符串处理类代码,需要的朋友可以参考下
    2012-06-06
  • 获取App.config配置文件中的参数值

    获取App.config配置文件中的参数值

    这篇文章介绍了获取app.config配置文件中的参数值方法,首先是要添加System.Configuration引用,其次类文件中必须有 using System.Configuration;再次App.config添加,最后向App.config配置文件添加参数,下面通过列子给大家讲解下,需要的朋友可以参考下
    2015-07-07
  • .net的socket异步通讯示例分享

    .net的socket异步通讯示例分享

    这篇文章主要介绍了.net的socket异步通讯示例,操作在下面,需要的朋友可以参考下
    2014-03-03

最新评论

?


http://www.vxiaotou.com