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

2024-03-04 0 79
目录
  • 如何通过.net core调用so文件
  • 代码
    • C代码和编译
    • C#代码

如何通过.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调用so文件内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 ASP.NET 通过.net core调用so文件的方法 https://www.u-9.cn/biancheng/aspnet/182982.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务