亚洲一区二区三区免费观看_天堂社区 天堂综合网 天堂资源最新版_亚洲欧美日韩综合一区_日产国产精品精品a∨_欧美激情一区二区三区在线视频_91香蕉视频在线下载_91精品久久久久久蜜桃_91嫩草视频在线观看_国产91社区_国产成人精品一区二区三区福利

長沙快付新聞資訊
您當前的位置是: 首頁->技術(shù)資訊->.net網(wǎng)站技術(shù)問題

C#中通過dllimport引入并調(diào)用C的庫

首發(fā): 長沙快付 版權(quán)所有,未經(jīng)許可嚴禁轉(zhuǎn)載
 一、寫一個最簡單的C函數(shù)并編譯成動態(tài)庫
嗯,直入正題,我們先用GVIM寫一個很簡單的C函數(shù):
GVIM寫一個很簡單的C函數(shù)
然后用GCC對它進行編譯(注意:這里是使用Windows中的GCC,采用MinGW安裝,如有不懂如何使用的讀者,可以移步到《如何安裝使用MinGW》進行學習)。
用GCC對它進行編譯
然后就出現(xiàn)了一個編譯好的庫,我們C這邊的工作就基本完成了。
 
二、如何通過Dllimport引入C寫的庫
如何引入一個非C#的庫,通常的方法就是采用DllImport,通過P/Invoke機制進行引入。當然在Mono上除了使用Dllimport外,還有另外的方式引入,這里我們不作任何探討。
我們新建一個控制臺程序,然后寫上我們的程序:
 
 1 namespace demo2
 2 {
 3     internal class Program
 4     {
 5         private static void Main(string[] args)
 6         {
 7             var cLib = new CLib();
 8             var p = CLib.SayHello();
 9             var str = Marshal.PtrToStringAuto(p);
10             Console.WriteLine(str);
11             Console.ReadKey();
12         }
13     }
14 
15     internal class CLib
16     {
17         [DllImport("你的so文件路徑/demo1.so")]
18         public extern static IntPtr SayHello();
19     }
20 }
按下F6編譯之后,我們在運行編譯好的exe文件:
通過Dllimport引入C寫的庫
瞧,成功調(diào)用了C的函數(shù)了,SO Easy,這里要注意一點的,也是很多童鞋經(jīng)常會犯的錯誤,那就是我們需要找到控制臺bin里的exe,雙擊運行,不能直接在VS中按F5調(diào)試運行,否則是無法看到C語言輸出的東西的。
 
三、關(guān)于參數(shù)傳遞
 
關(guān)于C/C#之間的參數(shù)傳遞,這里水比較深,拋開數(shù)組、結(jié)構(gòu)體等復雜類型不說,就簡單類型(int、char等)而言我私以為可以分為兩個部分,其一就是C#向C語言的參數(shù)傳遞,另外就是C語言向C#的return。
我們先對C#->C的傳遞方式進行講解,同樣的我們也繼續(xù)上demo。
我們定義了一個計算加法并輸出的函數(shù),然后修改我們C#的源代碼為:
using System;
using System.Runtime.InteropServices;
 
namespace demo2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var a = 10;
            var b = 20;
            var cLib = new CLib();
            unsafe
            {
                CLib.Add(&a, &b);
            }
            Console.ReadKey();
        }
    }
 
    internal class CLib
    {
        [DllImport("你的路徑/c/demo1.so")]
        public unsafe extern static IntPtr Add(int* a,int* b);
    }
}
按下F6之后運行exe文件:
C/C#之間的參數(shù)傳遞
Oh~Year。同樣沒有問題。
我們在此基礎(chǔ)上,試試字符串,同樣的,我們在C語言這里添加一個新函數(shù):
C/C#之間的參數(shù)傳遞添加
同樣的C#這里也進行改造:
using System;
using System.Runtime.InteropServices;
 
namespace demo2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var str = "你好,我是小蝶驚鴻";
 
            unsafe
            {
                fixed (char* p = str)
                {
                    CLib.Say(p);
                }
            }
            Console.ReadKey();
        }
    }
 
    internal class CLib
    {
        [DllImport("你的地址/demo1.so")]
        public unsafe extern static IntPtr Say(char* input);
    }
 
然后再重新生成so文件,重新編譯C#,并點擊exe運行:
重新生成so文件
可以看出,程序立馬報了個錯誤,具體原因就不跟各位讀者探討了,大概就是字符串沒有結(jié)束符,造成printf讀取完字符串本身之后還繼續(xù)的讀其他內(nèi)存,造成了越界。我們把代碼小改一下,由外部傳入一個字符串的長度。這里還需要注意一點,那就是在C語言中,char只占一個字節(jié)而C#中的char則是兩個字節(jié),由C#傳入的字符串還需要轉(zhuǎn)換一下。修改后的代碼如下圖所示:
由C#傳入的字符串還需要轉(zhuǎn)換修改的代碼
同樣的C#代碼也跟著修改: 
using System;
using System.Runtime.InteropServices;
 
namespace demo2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var str = "hi,i am xiaodiejinghong";
 
            unsafe
            {
                fixed (char* p = str)
                {
                    int length = str.Length;
                    CLib.Say(p, &length);
                }
            }
            Console.ReadKey();
        }
    }
 
    internal class CLib
    {
        [DllImport("E:/ASP/Mono/project/嵌入技術(shù)/c/demo1.so", CallingConvention = CallingConvention.StdCall)]
        public unsafe extern static IntPtr Say(char* input, int* length);
    }
}
編譯后再次運行:
C#中通過dllimport引入并調(diào)用C的庫編譯
程序正常無誤。至此,C#向C傳遞參數(shù)部分暫且講解完畢,下面我們再講解C#如何接收從C函數(shù)返回的信息。
 
可能有讀者認為直接使用Return即可,在某種程度上,確實是可以使用Return,譬如返回一個在C中寫死了的字符串(那是因為編譯器已經(jīng)把這段固定字串當成常量存儲起來),但如若需要返回一串動態(tài)的字串,這種直接Return的方式就行不通了(字符串離開函數(shù)之后被回收,不信可以試試)。我們需要使用一些其他方法來接收從C返回的資源,在這里,我們要給各位讀者介紹的方式是通過在C#中給出一個容器,并把它的指針傳入C中,C需要返回的東西都存放到改容器中,這樣想返回的東西就不會被C回收掉了。
 
我們的C示例代碼如下:
C#中通過dllimport引入并調(diào)用C的庫c示例代碼
C#的代碼如下: 
using System;
using System.Runtime.InteropServices;
 
namespace demo2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var str1 = "hi,";
            var str2 = "i am xiaodiejinghong ";
            var l1 = str1.Length;
            var l2 = str2.Length;
            var output = new char[l1 + l2];
            unsafe
            {
                fixed (char* p1 = str1) fixed (char* p2 = str2) fixed (char* op = output)
                {
                    CLib.Merge(p1, &l1, p2, &l2, op);
                    Console.WriteLine(Marshal.PtrToStringAnsi((IntPtr)op));
                }
            }
            Console.ReadKey();
        }
    }
 
    internal class CLib
    {
        [DllImport("你的路徑/demo1.so", CallingConvention = CallingConvention.StdCall)]
        public unsafe extern static IntPtr Merge(char* input1, int* length1, char* input2, int* length2, char* output);
    }
}
重新編譯后運行:
C#中通過dllimport引入并調(diào)用C的庫合并成功
成功合并了。 
至此,本篇內(nèi)容就到此結(jié)束,關(guān)于C/C#互調(diào)混合編程的水很深,對各方面的要求都很高,可以說,能夠玩轉(zhuǎn)的人必定是雙料達人。
  • 最新簽約客戶
  • 最新上線網(wǎng)站
為什么選擇長沙快付公司?

8年專業(yè)做網(wǎng)站經(jīng)驗
幫助您解決各種需求,并得到滿意方案

效果滿意后付款
預付30%定金,效果讓您滿意后,付全款

資深用戶體驗設(shè)計師
秉承"一切以用戶價值為依歸"理念,重視用戶體驗,專為企業(yè)需求進行定制

采用國際標準結(jié)構(gòu)建站
DIV+CSS國際標準構(gòu)建網(wǎng)頁,可有效提高網(wǎng)站訪問速度、提高網(wǎng)站頁面的可維護

實現(xiàn)網(wǎng)絡營銷[SEO]最大化
網(wǎng)站程序中融入SEO,有效降低企業(yè)成本

分享到:
亚洲一区二区三区免费观看_天堂社区 天堂综合网 天堂资源最新版_亚洲欧美日韩综合一区_日产国产精品精品a∨_欧美激情一区二区三区在线视频_91香蕉视频在线下载_91精品久久久久久蜜桃_91嫩草视频在线观看_国产91社区_国产成人精品一区二区三区福利
免费观看国产成人| 午夜免费电影一区在线观看| 伊人久久av导航| 欧美日韩成人一区二区三区| 国产精品久久国产三级国电话系列| 久久综合精品一区| 秋霞久久久久久一区二区| 国产精品日韩一区二区免费视频| 久久综合色一本| 欧美一区二区综合| 51蜜桃传媒精品一区二区| 91免费版网站在线观看| 日韩精品久久一区| 欧洲一区二区日韩在线视频观看免费| 在线观看日本一区| 最近看过的日韩成人| 国产乱码精品一区二区三区卡| 久久国产精品99久久久久久丝袜| 精品一区二区久久久久久久网站| 免费看成人片| 亚洲欧洲日韩综合二区| 裸体丰满少妇做受久久99精品| 欧美一区二区三区四区夜夜大片| 国产高清在线精品一区二区三区| 国偷自产av一区二区三区小尤奈| 国产一区二区自拍| 在线成人av电影| 日韩av大全| 久久国产精品-国产精品| 亚洲人成影视在线观看| 超碰国产精品久久国产精品99| 国产日韩久久| 欧美日韩在线高清| 久久精品综合一区| 色一情一乱一伦一区二区三区丨| 成人91视频| 99久久久久国产精品免费| 7777精品伊久久久大香线蕉语言| 日韩精品av一区二区三区| 少妇精品久久久久久久久久| 精品欧美日韩| 国产在线一区二区三区欧美| 老牛影视免费一区二区| 日韩影片在线播放| 视频在线精品一区| 99电影网电视剧在线观看| 粉嫩精品一区二区三区在线观看| 97视频中文字幕| 欧美日产一区二区三区在线观看| 免费观看成人高| 欧洲精品一区色| 国产视频精品网| 国产日韩二区| www日韩av| 日本在线成人一区二区| 成人免费在线一区二区三区| 国产成人精品免费视频大全最热| 国产日韩在线一区二区三区| 3d动漫啪啪精品一区二区免费| 蜜桃久久精品乱码一区二区| 欧美日韩国产精品一卡| 91九色蝌蚪嫩草| 九色综合婷婷综合| 91日韩久久| 久久久久久国产精品一区| 国产经品一区二区| 日韩色妇久久av| 先锋影音一区二区三区| 亚洲 日韩 国产第一区| 97神马电影| 亚洲一区二区在线看| 超碰97网站| 91|九色|视频| 制服诱惑一区| 亚洲欧洲国产日韩精品| 日产精品久久久一区二区| 国产不卡一区二区三区在线观看| 亚洲一区三区| 一区二区三区不卡在线| 欧美黄色直播| 精品伦精品一区二区三区视频| 日韩高清av| 日本在线观看一区| 视频一区二区综合| 国产精品国产精品国产专区不卡| 亚洲精品白虎| 久久精品magnetxturnbtih| 国产在线精品一区二区三区》| 高清av免费一区中文字幕| 91久久大香伊蕉在人线| 成人免费视频视频在| 欧美日韩在线精品一区二区三区| 91成人免费看| 91久久大香伊蕉在人线| 亚洲va韩国va欧美va精四季| 视频一区二区三| 亚洲国产日韩欧美| 亚洲自拍的二区三区| 欧美深深色噜噜狠狠yyy| 国产精品香蕉视屏| 欧美一区二视频在线免费观看| 国产69精品久久久久9999apgf| 欧洲成人一区二区| 性刺激综合网| 蜜桃传媒视频麻豆第一区免费观看| 在线综合视频网站| 国产超碰91| 日韩亚洲欧美精品| 在线国产99| 日本一区免费观看| 91高跟黑色丝袜呻吟在线观看| 国内外成人免费视频| 久久av一区二区| 亚洲欧美日韩另类精品一区二区三区| 一卡二卡3卡四卡高清精品视频| 在线丝袜欧美日韩制服| 欧美日韩精品免费看| 亚洲成人av动漫| 影音先锋欧美在线| 久草一区二区| 青青草成人网| 牛人盗摄一区二区三区视频| 好吊色欧美一区二区三区视频| 久久视频在线观看中文字幕| 午夜精品一区二区在线观看的| 一区二区三区四区欧美日韩| 欧美在线3区| 另类视频在线观看+1080p| 亚洲国产精品一区二区第四页av| 欧美日韩亚洲一区二区三区在线观看| 在线免费观看成人| 欧美在线视频二区| 欧美一区三区二区在线观看| 97中文在线观看| 97超级在线观看免费高清完整版电视剧| 91国产丝袜在线放| 亚洲一区尤物| 亚洲午夜激情| 国产高清在线精品一区二区三区| 欧美一区二区三区电影在线观看| 蜜桃网站成人| 久久久福利视频| 一本久道久久综合| 高清国语自产拍免费一区二区三区| 国产精品一区视频| 亚洲最大色综合成人av| 久久青青草原一区二区| 色阁综合av| 欧美精品一区二区三区四区五区| 欧美精品一区二区三区在线四季| 99re国产视频| 精品国产一区二区三区四区vr| 亚洲欧美日韩国产成人综合一二三区| 日韩aⅴ视频一区二区三区| 亚洲va久久久噜噜噜久久狠狠| 久久久久久久久久码影片| 亚洲欧洲精品一区二区三区波多野1战4| 精品国产一区二区三区麻豆免费观看完整版| 亚洲综合av一区| 97久草视频| 亚洲欧洲一二三| 亚洲日本一区二区三区在线不卡| 国产精品一区二区在线观看| 国产精品午夜av在线| 国产一区二区高清视频| 亚洲国产精品一区二区第一页| 成人激情av| 欧美日韩精品久久久免费观看| 国产福利久久精品| 高清一区二区三区视频| 国产精品一国产精品最新章节| 国产一区精品视频| 国产精品永久入口久久久| 精品国产乱码久久久久久88av| 含羞草久久爱69一区| 不卡一区二区三区四区五区| 国产一区二区在线观看免费播放| 国产 高清 精品 在线 a| 国产中文一区二区| 一本一道久久a久久精品综合| 久久一区二区精品| 国精产品99永久一区一区| 欧美日韩大片一区二区三区| 久久96国产精品久久99软件| 国产综合动作在线观看| 日韩av电影免费观看| 蜜桃传媒视频麻豆第一区免费观看| 亚洲看片网站| 久久久久久国产精品mv| 51蜜桃传媒精品一区二区| 亚洲精品久久区二区三区蜜桃臀| 欧美激情国产日韩| 久久久国产精品一区二区三区| 欧美性大战久久久久| 亚洲永久激情精品| 国产专区一区二区三区| 精品乱码一区二区三区| 欧美深深色噜噜狠狠yyy| 欧美性bbwbbwbbwhd| 国产成人免费电影| 国产一区二区高清不卡| 日本一区二区三区免费看| 久久久精品动漫| 品久久久久久久久久96高清| 亚洲精品tv久久久久久久久| 日本成人黄色免费看| 中文有码久久| 亚洲一区三区电影在线观看| 欧美亚洲丝袜| 日本精品一区二区三区高清 久久| 精品免费二区三区三区高中清不卡| 欧美成人第一区| 成人av网站观看| 成人在线资源网址| 国产亚洲二区| 久久久久一区二区| 黄色一区三区| 欧美日韩国产精品一区二区| 国产在线播放一区二区| 亚洲国产精品一区二区第四页av| 国产亚洲欧美另类一区二区三区| 日韩性感在线| 中文字幕一区综合| 国产精品一区二区三区在线观| 亚洲视频欧美在线| 国产乱码精品一区二区三区中文| 国产欧美日韩在线播放| 国产伦精品一区二区三区免| 欧美日韩高清免费| 久久99精品久久久久久久久久| 999在线观看免费大全电视剧| 国产精品久久久久久久小唯西川| 国产在线精品二区| 欧美一区观看| 婷婷精品国产一区二区三区日韩| 国产精成人品localhost| 国产精品国产精品| 91精品国产一区二区三区动漫| 在线丝袜欧美日韩制服| 天堂精品一区二区三区| 国产精品久久久一区二区三区| 日韩不卡av| 欧美国产一区二区在线| 中文字幕欧美日韩一区二区三区| 国产一区免费在线| 亚洲精品一区二区三区蜜桃久| 日韩女优中文字幕| 亚洲午夜精品久久| 美乳视频一区二区| 亚洲一区二区三区午夜| 亚洲午夜精品国产| 影音先锋欧美在线| 尤物国产精品| 日韩av一区二区三区美女毛片| 相泽南亚洲一区二区在线播放| 天堂√在线观看一区二区| 国产视频不卡| 色狠狠久久av五月综合| 国产一区免费在线观看| 麻豆av一区| 国产综合欧美在线看| 国产伦视频一区二区三区| 国产日韩欧美亚洲一区| 色99中文字幕| 婷婷久久五月天| 亚洲国产精品久久久久婷婷老年| 欧美高清性xxxxhdvideosex| 国产精品一区二区三区不卡| 欧美精品一区二区三区久久| 亚洲一区二区三区加勒比| 国产一区二区三区奇米久涩| 日本成人三级电影网站| 久久精彩视频| 超碰在线观看97| 色视频一区二区三区| 最新国产精品久久| 国产欧美一区二区视频| 欧美伦理一区二区| 乱一区二区三区在线播放| 99久热re在线精品996热视频| 欧美中文娱乐网| 国产精品久久久久久免费观看| 麻豆视频成人| 在线码字幕一区| 久久99精品久久久久久青青日本| 亚洲一区二区三区精品动漫| 国产91aaa| 视频在线99re| 国产一区二区三区免费不卡| 亚洲国产精品久久久久久女王| 久久综合入口| 先锋影音一区二区三区| 高清不卡一区二区三区| 99久久精品免费看国产一区二区三区| 欧美一区二区三区四区五区六区| 精品日韩欧美| 欧美亚洲一级二级| 成人欧美一区二区三区黑人免费| 成人动漫在线观看视频| 98国产高清一区| 99re视频在线观看| 91传媒免费看| 欧美日韩在线精品一区二区三区| 日韩jizzz| 日韩精品资源| 日韩国产在线一区| 国内精品国语自产拍在线观看| 日韩免费一区二区三区| 成人午夜影院在线观看| 亚洲精品在线免费| 5g国产欧美日韩视频| 久久99精品久久久水蜜桃| 欧美一区二区三区在线免费观看| 99高清视频有精品视频| 99视频在线免费观看| 欧美性大战久久久久| 国产精选一区二区| 极品日韩久久| 美乳视频一区二区| 97视频热人人精品| 日韩高清国产精品| 国产成人亚洲欧美| 自拍偷拍亚洲色图欧美| 欧美人与性禽动交精品| 视频三区二区一区| 欧美一区二区影视| 久草热久草热线频97精品| 成人3d动漫一区二区三区91| 一本一本久久a久久精品综合妖精| 国产在线精品一区二区三区| 欧美重口乱码一区二区| 97中文在线观看| aaa级精品久久久国产片| 国产精品美女诱惑| 欧美视频1区| 亚洲三区四区| 欧美大香线蕉线伊人久久| 国产经典一区二区三区| 少妇免费毛片久久久久久久久| 国产在线一区二| 久久av一区二区三区亚洲| 999国内精品视频在线| 欧美极品色图| 美女精品国产| 欧美午夜精品理论片a级大开眼界| 影音欧美亚洲| 成人黄色在线免费观看| 欧美精品v日韩精品v国产精品| 国产伦精品一区二区三区高清| 深田咏美在线x99av| 岛国一区二区三区高清视频| 精品久久久久久一区| 少妇精品久久久久久久久久| 国产一区二区三区色淫影院| 久久伊人一区二区| 中文字幕一区综合| 麻豆蜜桃91| 狠狠干一区二区| 欧美极品一区| 国产自产在线视频一区| 国产精品综合久久久久久| 国产精品二区在线观看| 97se视频在线观看| 亚洲国内在线| 久久国产精品免费一区| 亚洲v日韩v欧美v综合| 亚洲成人蜜桃| 亚洲一区二区在线免费观看| 日韩欧美在线电影| 免费影院在线观看一区| 西游记1978| 国产高清在线一区| 国产精品久久久久久久久久久久冷| 精品午夜一区二区三区| 蜜桃网站成人| 精品国产_亚洲人成在线| 一区二区在线观看网站| 超碰国产精品久久国产精品99| 欧美亚洲丝袜| 国产精品久久久久久久免费大片| 激情伦成人综合小说| 天堂社区 天堂综合网 天堂资源最新版| 国产一区精品在线| 制服国产精品| 日韩一区二区电影在线观看| 一区二区三视频| 久久精品日韩| 蜜桃999成人看片在线观看| 日韩在线三级| 麻豆av一区二区三区久久| 精品午夜一区二区| 色女孩综合网| 精品无码久久久久国产| 日韩在线观看电影完整版高清免费| 久久99精品久久久久子伦| 欧美在线播放一区| 91免费版黄色| 久久人人97超碰人人澡爱香蕉| 久久久精彩视频| 日本最新一区二区三区视频观看|