通過.net core調(diào)用so文件的方法
如何通過.net core調(diào)用so文件
工作中需要在linux上監(jiān)控系統(tǒng)空閑時間,但是沒有找到C#代碼,只找到C的代碼,所以準(zhǔn)備將C文件編譯為so然后用P/invoke調(diào)用。
代碼
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>
/// 調(diào)用getIdle.so獲取系統(tǒng)空閑時間
/// </summary>
/// <returns></returns>
internal static int GetIdleTime()
{
return getIdleTime().ToInt32();
}
}編譯生成后,將程序文件夾中的文件復(fù)制到linux上,并將so文件放到程序目錄下。使用bashdotnet Test.dll命令運(yùn)行程序,可以看到能夠正常調(diào)用so文件。

到此這篇關(guān)于如何通過.net core調(diào)用so文件的文章就介紹到這了,更多相關(guān).net core調(diào)用so文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET下使用WScript.Shell執(zhí)行命令
ASP.NET下有自己的執(zhí)行CMD命令的方式,這里用WScript.Shell似有畫蛇添足之嫌,但是我們也不能排除真的有機(jī)器禁用了.NET的相關(guān)類,未雨綢繆嘛。當(dāng)然也不僅僅局限于WScript.Shell,只要是ASP中能用的組件,統(tǒng)統(tǒng)都可以用于ASP.NET中,而且還更方便!2008-05-05
asp.net 漢字轉(zhuǎn)換拼音及首字母實(shí)現(xiàn)代碼
asp.net 漢字轉(zhuǎn)換拼音及首字母實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-12-12
ASP.NET通用權(quán)限驗(yàn)證的實(shí)現(xiàn)代碼思路
這篇文章主要介紹了ASP.NET通用權(quán)限驗(yàn)證的實(shí)現(xiàn)代碼思路,需要的朋友可以參考下2015-12-12
asp.net利用HttpModule實(shí)現(xiàn)防sql注入
關(guān)于sql注入,已經(jīng)被很多人討論過了。這篇沒有新意功能也不夠通用,nnd,不想引起口水,就是覺得簡單而且思路有參考性才貼出來。2009-12-12
.NET?Core內(nèi)存結(jié)構(gòu)體系(Windows環(huán)境)底層原理解析
文章介紹了物理內(nèi)存和虛擬內(nèi)存的區(qū)別,以及Windows系統(tǒng)中虛擬內(nèi)存的管理方式,物理內(nèi)存是計算機(jī)硬件中的實(shí)際RAM,而虛擬內(nèi)存是由操作系統(tǒng)管理的抽象內(nèi)存層,感興趣的朋友一起看看吧2025-02-02
asp.net用url重寫URLReWriter實(shí)現(xiàn)任意二級域名
Asp.net 用url重寫(URLReWriter)實(shí)現(xiàn)任意二級域名2008-10-10

