亚洲一区二区三区免费观看_天堂社区 天堂综合网 天堂资源最新版_亚洲欧美日韩综合一区_日产国产精品精品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社区_国产成人精品一区二区三区福利
精品日产一区2区三区黄免费| 91成人免费看| 日韩国产欧美一区| 99久久99久久精品国产片| 51成人做爰www免费看网站| 久久久久久国产精品mv| 亚洲欧洲一区二区福利| 欧洲一区二区日韩在线视频观看免费| 国产精品对白刺激久久久| 欧美日韩一区综合| 麻豆av一区二区三区| 日韩电影大全在线观看| 亚洲精品影院| 亚洲精品在线免费| 欧美一区二区视频在线| 欧美一区二区三区四区夜夜大片| 免费成人看片网址| 久久伦理网站| 久久久久久久免费| 一区二区三区不卡在线| 精品日本一区二区| 一区二区三区久久网| 精品国产中文字幕| 久久久久国产精品视频| 欧美日韩一区二| 在线精品亚洲一区二区| 日韩在线第一区| 成人欧美一区二区三区视频xxx| 成人蜜桃视频| 亚洲国产精品www| 国外成人在线视频网站| 图片区小说区区亚洲五月| 日韩亚洲一区在线播放| 日本午夜精品一区二区三区| 超碰97在线人人| 亚洲三区在线| 国产精品视频一区二区三区经| 国内精品一区二区| 中文字幕中文字幕99| 视频一区二区精品| 少妇免费毛片久久久久久久久| 亚洲一区二区不卡视频| 好吊色欧美一区二区三区四区| 成人动漫视频在线观看免费| 美媛馆国产精品一区二区| 亚洲精品一区二区三区av| 久久99精品国产99久久| 久久精彩视频| 久久精品午夜一区二区福利| 日韩国产精品一区二区| julia一区二区中文久久94| 色综合电影网| 欧美日本国产精品| 欧美1o一11sex性hdhd| 制服国产精品| 亚洲精品欧美精品| 日韩视频专区| 国产精品国色综合久久| 国模一区二区三区私拍视频| 天堂√在线观看一区二区| 欧美成人一区二区在线| 久久av二区| 国产伦精品一区二区三| 免费国产在线精品一区二区三区| 亚洲视频在线观看日本a| 5566av亚洲| 九九九久久久| 中文字幕欧美日韩一区二区三区| 粉嫩高清一区二区三区精品视频| 国产 高清 精品 在线 a| 亚洲最大免费| 国产精品乱码视频| 黑人巨大精品欧美一区二区小视频| 黑人巨大精品欧美一区二区小视频| 欧美精品欧美精品系列c| 亚洲一区二区免费视频软件合集| 51午夜精品| 国产 高清 精品 在线 a| 99精品国产高清在线观看| 欧美日韩国产精品一区二区| 欧美精品中文字幕一区二区| 国产成人精品日本亚洲11| 一区视频二区视频| 天堂√在线观看一区二区| 亚洲一区不卡在线| 日韩理论片在线观看| 国产欧美日韩在线播放| 久久精品国产精品国产精品污| 成人动漫视频在线观看完整版| 国产福利久久精品| 精品午夜一区二区| 免费久久久一本精品久久区| 7777精品伊久久久大香线蕉语言| 91青青草免费在线看| 成人在线免费观看一区| 亚洲精品久久久久久一区二区| 久久国产精品一区二区三区四区| 欧美一区二区高清在线观看| 奇米视频888战线精品播放| 视频一区视频二区视频| 欧美色欧美亚洲另类七区| 亚洲一区二区精品在线| 国产精品xxx在线观看www| 欧美黑人xxxxx| 欧美日韩在线一二三| 午夜精品一区二区三区在线观看| 日韩视频专区| 高清av免费一区中文字幕| 欧美福利精品| 国产专区一区二区三区| 日韩一区二区三区资源| 5566中文字幕一区二区| 一区二区三区我不卡| 久久综合久久久| 国产伦精品一区二区三区高清版| 国产亚洲欧美另类一区二区三区| 成人黄动漫网站免费| 国产精品乱码视频| 伊人久久大香线蕉成人综合网| 精品一区二区三区自拍图片区| 久久99精品国产99久久| 国产伦精品一区二区三区免费视频| 日韩一二三区不卡在线视频| 麻豆一区区三区四区产品精品蜜桃| 蜜桃免费一区二区三区| 六十路精品视频| 欧美区高清在线| 一区二区成人国产精品| 国产日韩精品久久| 国产精品久久久久久久免费大片| 国产美女在线精品免费观看| 成人在线免费网站| 51国偷自产一区二区三区| 99在线视频免费观看| 国产精品一区二区三区在线观| 国产一区二区精品免费| 热re99久久精品国99热蜜月| 国产精品精品软件视频| 视频一区视频二区视频三区视频四区国产| 日韩和欧美的一区二区| 国产精品jizz视频| 国产精品香蕉视屏| 69堂成人精品视频免费| 日韩美女一区| 欧美日韩三区四区| av日韩中文字幕| 超碰97国产在线| 亚洲看片网站| 久久婷婷人人澡人人喊人人爽| 99久久精品免费看国产一区二区三区| 久久久精品有限公司| 欧美午夜精品久久久久久蜜| 99视频免费观看蜜桃视频| 三区精品视频观看| 欧美一区二视频在线免费观看| 精品一区二区久久久久久久网站| 欧美日韩精品一区| 亚洲色图自拍| 日韩精品成人一区二区在线观看| 欧美日韩精品免费观看视一区二区| 久久riav二区三区| 婷婷久久伊人| 五月婷婷综合色| 久久综合狠狠综合久久综青草| 好吊妞www.84com只有这里才有精品| 神马影院我不卡| 国产欧美一区二区视频| 色吧亚洲视频| 欧美一区二区影视| 成人动漫在线观看视频| av成人免费观看| 亚洲欧美日韩精品久久久| 国产精品毛片一区视频| 一区二区三区四区五区视频| 97se在线视频| 日本在线成人一区二区| 亚洲高清在线播放| 国产精品日韩一区二区免费视频| 精品免费一区二区三区蜜桃| 国产伦精品一区二区三| 亚洲国产欧美一区二区三区不卡| 日韩色妇久久av| 97久久夜色精品国产九色| 亚洲欧美精品在线观看| 欧美久久久久久| 国产午夜精品一区| 国产精品一区二区三区在线| 国产一区二区中文字幕免费看| 精品无人区一区二区三区竹菊| 日韩国产精品一区二区三区| 最新精品视频| 成人性色av| 国产精品久久久久久久天堂第1集| 日韩三级电影免费观看| 国产一级特黄a大片99| 欧美日韩一区二区三区在线视频| 99在线热播| 超碰国产精品久久国产精品99| 国产精品二区在线| 欧美一区二区在线| 精品久久久久亚洲| 亚洲永久一区二区三区在线| 蜜桃999成人看片在线观看| 任我爽在线视频精品一| 免费成人在线观看av| 精品欧美一区二区三区久久久| 中文字幕精品一区日韩| 99在线视频播放| 国产精品成人观看视频免费| 欧美高清视频一区| 欧美亚洲免费在线| 精品网站在线看| 亚洲欧美日韩不卡一区二区三区| 96久久精品| 好吊色欧美一区二区三区视频| 久久影视中文粉嫩av| 手机看片福利永久国产日韩| 正在播放一区二区三区| 欧美午夜精品理论片a级大开眼界| 99精品在线直播| 日本免费高清一区二区| 资源网第一页久久久| yy111111少妇影院日韩夜片| 亚洲欧洲日韩精品| 午夜精品一区二区三区在线观看| 草莓视频一区| 视频一区二区三区免费观看| 日韩精品一区二区三区外面| 99理论电影网| 中文字幕av日韩精品| 日韩精品欧美在线| 一级特黄录像免费播放全99| 亚洲高清视频在线观看| 乱色588欧美| 97神马电影| 国产高清一区二区三区| 宅男一区二区三区| 亚洲欧美国产不卡| 久久久婷婷一区二区三区不卡| 精品日韩美女| 国产精品免费一区二区三区在线观看| 99re视频在线观看| 日韩欧美在线电影| 国产一级精品aaaaa看| 亚洲春色在线视频| 特级西西444www大精品视频| 国产精品v欧美精品v日韩精品| 精品无码久久久久国产| 极品日韩久久| 97se视频在线观看| 日韩av一区二区三区在线观看| 九9re精品视频在线观看re6| 免费成人深夜夜行视频| 成人国产一区二区| 久久99精品久久久久久三级| 五月婷婷一区| 日本一区二区三区四区在线观看| 欧美久久在线| 欧美一级日本a级v片| 亚洲欧洲中文| 好吊色欧美一区二区三区四区| 中文字幕一区二区三区有限公司| 成人xxxxx色| 国产精品一区在线观看| 艳色歌舞团一区二区三区| 正义之心1992免费观看全集完整版| 日韩精品资源| 一区二区免费在线视频| 欧美激情导航| 欧美日韩电影一区二区| 亚洲精品国产精品国自产观看| 亚洲五月六月| 中国一区二区三区| 伊人久久大香线蕉成人综合网| 91青青草免费在线看| 国产免费一区| 高清不卡日本v二区在线| 日韩国产精品一区二区| 一区二区三区三区在线| 精品国产日本| 99在线国产| 欧美日韩精品一区| 国产乱码精品一区二区三区卡| 91久久精品www人人做人人爽| 国产在线一区二区三区四区| 一区二区精品免费视频| 日韩国产精品一区二区三区| 色中色综合成人| 久久人人爽爽人人爽人人片av| 国产精品一区二区三区观看| 亚洲国产精品综合| 91在线观看网站| 国产精品视频在线免费观看| 亚洲精品国产精品久久| 欧美精品一区在线发布| 色涩成人影视在线播放| 一区二区免费在线视频| 国产精品v欧美精品∨日韩| 日韩精品av一区二区三区| 国产精品免费在线播放| 先锋在线资源一区二区三区| 神马影院一区二区三区| 国产精品国产三级欧美二区| 日韩精品另类天天更新| 欧美日韩精品免费观看视一区二区| 五月天婷亚洲天综合网鲁鲁鲁| 国产精品伊人日日| 国产一区二区三区四区hd| 欧美高清性xxxxhd| 亚洲午夜激情| 欧美日韩一区二区视频在线| 久久国产一区二区| 欧美精品v日韩精品v国产精品| 亚洲午夜激情| 91精品国产高清久久久久久91裸体| 5566av亚洲| 99国产超薄丝袜足j在线观看| 色婷婷精品国产一区二区三区| 欧美精品一区二区三区在线四季| 日本一区二区三区视频在线播放| 综合久久国产| 国产成人精品自拍| 激情视频一区二区| 高清国产在线一区| 国产高清一区视频| 蜜桃av久久久亚洲精品| 日韩欧美精品一区二区三区经典| 欧美在线3区| 鲁鲁视频www一区二区| 久久久国产精品一区二区三区| 久久精品国产一区二区三区日韩| 亚洲综合欧美日韩| 久久国产精品高清| 夜夜爽99久久国产综合精品女不卡| 一区二区av| 亚洲高清在线播放| 国精产品一区二区| 久久精品日韩精品| 亚洲国产精品久久久久婷婷老年| 自拍偷拍亚洲色图欧美| 国产激情美女久久久久久吹潮| 国产精品区一区二区三在线播放| 亚洲国产欧美一区二区三区不卡| 亚洲女人毛片| 国产精品午夜av在线| 国产精品污www一区二区三区| 久久本道综合色狠狠五月| 久久99精品久久久久久水蜜桃| 欧美久久久久久| 懂色一区二区三区av片| 国产青春久久久国产毛片| 欧美精品一区三区在线观看| 国产日韩欧美一区二区三区四区| 日本黑人久久| 狠狠色综合一区二区| 美女黄毛**国产精品啪啪| 日韩色妇久久av| 国产福利久久精品| 亚洲精品一卡二卡三卡四卡| 日韩高清三级| 久久99国产精品99久久| 日韩av电影免费在线| 国产精品yjizz| 正在播放91九色| 官网99热精品| 欧美精品一区在线| 亚洲精品国产精品国自产| 一区二区日本伦理| 日本在线视频一区| 九九九久久久| 欧美色欧美亚洲另类七区| 日韩精品一线二线三线| 日韩在线观看电影完整版高清免费| 国产伦精品一区二区三区四区视频| 久久久久久欧美精品色一二三四| 亚洲国产日韩欧美| 亚洲欧洲中文| 欧洲精品在线一区| 亚洲第一综合| 欧美凹凸一区二区三区视频| 国产中文一区二区| 国产在线播放一区二区| 国产精品久久九九| 亚洲欧洲另类精品久久综合| 日本一区二区三区www| 欧美国产综合视频| 狠狠色狠狠色综合人人| 国产伦精品一区二区三区照片91| 俄罗斯精品一区二区| 神马影院一区二区三区| 亚洲欧美久久久久一区二区三区| 91手机在线播放| av日韩中文字幕| 91精品婷婷国产综合久久蝌蚪| 欧美一区观看| 5g影院天天爽成人免费下载| 97se国产在线视频| 亚洲欧美日韩精品综合在线观看| 亚洲欧美国产精品桃花| 免费中文日韩|