精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Visual Studio 2010調用非C#編寫的DLL文件

開發 后端
我們今天要談到的Visual Studio 2010上使用C#調用非托管C++生成的DLL文件,希望對大家有所幫助。

背景

在項目過程中,有時候你需要調用非C#編寫的DLL文件,尤其在使用一些第三方通訊組件的時候,通過C#來開發應用軟件時,就需要利用DllImport特性進行方法調用。本篇文章將引導你快速理解這個調用的過程。

步驟

1. 創建一個CSharpInvokeCPP的解決方案:

image

2. 創建一個C++的動態庫項目:

image

3. 在應用程序設置中,選擇“DLL”,其他按照默認選項:

image

***點擊完成,得到如圖所示項目:

image

我們可以看到這里有一些文件,其中dllmain.cpp作為定義DLL應用程序的入口點,它的作用跟exe文件有個main或者WinMain入口函數是一樣的,它就是作為DLL的一個入口函數,實際上它是個可選的文件。它是在靜態鏈接時或動態鏈接時調用LoadLibrary和FreeLibrary時都會被調用。詳細內容可以參考(http://blog.csdn.net/benkaoya/archive/2008/06/02/2504781.aspx)。

4. 現在我們打開CSharpInvokeCPP.CPPDemo.cpp文件:

現在我們加入以下內容:

  1. // CSharpInvokeCPP.CPPDemo.cpp : 定義 DLL 應用程序的導出函數。   
  2.  //   
  3. #include "stdafx.h"   
  4.  extern "C" __declspec(dllexport) int Add(int x, int y)   
  5.  {   
  6.  return x + y;   
  7. }   
  8.  extern "C" __declspec(dllexport) int Sub(int x, int y)   
  9.  {   
  10.  return x - y;   
  11.  }   
  12.  extern "C" __declspec(dllexport) int Multiply(int x, int y)   
  13. {   
  14.  return x * y;   
  15. }   
  16.  extern "C" __declspec(dllexport) int Divide(int x, int y)   
  17.  {   
  18. return x / y;   
  19. }   
  20.  

extern "C" 包含雙重含義,從字面上即可得到:首先,被它修飾的目標是“extern”的;其次,被它修飾的目標是“C”的。而被extern "C"修飾的變量和函數是按照C語言方式編譯和連接的。

__declspec(dllexport)的目的是為了將對應的函數放入到DLL動態庫中。

extern "C" __declspec(dllexport)加起來的目的是為了使用DllImport調用非托管C++的DLL文件。因為使用DllImport只能調用由C語言函數做成的DLL。

5. 編譯項目程序,***在Debug目錄生成CSharpInvokeCPP.CPPDemo.dll和CSharpInvokeCPP.CPPDemo.lib

image

我們用反編譯工具PE Explorer查看下該DLL里面的方法:

image

可以發現對外的公共函數上包含這四種“加減乘除”方法。

6. 現在來演示下如何利用C#項目來調用非托管C++的DLL,首先創建C#控制臺應用程序:

image

7. 在CSharpInvokeCSharp.CSharpDemo項目上新建一個CPPDLL類,編寫以下代碼:

  1.  public class CPPDLL   
  2.  {   
  3.  [DllImport("CSharpInvokeCPP.CPPDemo.dll")]   
  4. public static extern int Add(int x, int y);   
  5.  [DllImport("CSharpInvokeCPP.CPPDemo.dll")]   
  6. public static extern int Sub(int x, int y);   
  7. [DllImport("CSharpInvokeCPP.CPPDemo.dll")]   
  8.  public static extern int Multiply(int x, int y);   
  9. [DllImport("CSharpInvokeCPP.CPPDemo.dll")]   
  10.  public static extern int Divide(int x, int y);   
  11.  }  

DllImport作為C#中對C++的DLL類的導入入口特征,并通過static extern對extern “C”進行對應。

8. 另外,記得把CPPDemo中生成的DLL文件拷貝到CSharpDemo的bin目錄下,你也可以通過設置【項目屬性】->【配置屬性】->【常規】中的輸出目錄:

image

這樣編譯項目后,生成的文件就自動輸出到CSharpDemo中了。

9. 然后在Main入口編寫測試代碼:

  1.  static void Main(string[] args)   
  2. {   
  3.  int result = CPPDLL.Add(10, 20);   
  4.  Console.WriteLine("10 + 20 = {0}", result);   
  5. result = CPPDLL.Sub(30, 12);   
  6.  Console.WriteLine("30 - 12 = {0}", result);   
  7. result = CPPDLL.Multiply(5, 4);   
  8.  Console.WriteLine("5 * 4 = {0}", result);   
  9.  result = CPPDLL.Divide(30, 5);   
  10.  Console.WriteLine("30 / 5 = {0}", result);   
  11.  Console.ReadLine();   
  12.  }  

運行結果:

image

方法得到調用。
 

10. 以上的方法只能通過靜態方法對于C++中的函數進行調用。那么怎樣通過靜態方法去調用C++中一個類對象中的方法呢?現在我在CPPDemo項目中添加一個頭文件userinfo.h: 

  1.  class UserInfo {   
  2. private:   
  3. char* m_Name;   
  4.  int m_Age;   
  5.  public:   
  6. UserInfo(char* name, int age)   
  7.  {   
  8.  m_Name = name;   
  9.  m_Age = age;   
  10.  }   
  11.  virtual ~UserInfo(){ }   
  12. int GetAge() { return m_Age; }   
  13. char* GetName() { return m_Name; }   
  14.  };  

在CSharpInvokeCPP.CPPDemo.cpp中,添加一些代碼:

  1.  #include "malloc.h"   
  2.  #include "userinfo.h"   
  3. typedef struct {   
  4. char name[32];   
  5.  int age;   
  6. } User;   
  7.  UserInfo* userInfo;   
  8. extern "C" __declspec(dllexport) User* Create(char* name, int age)   
  9.  {   
  10.  User* user = (User*)malloc(sizeof(User));   
  11.  userInfo = new UserInfo(name, age);   
  12. strcpy(user->name, userInfo->GetName());   
  13.  user->age = userInfo->GetAge();   
  14. return user;   
  15.  }  

這里聲明一個結構,包括name和age,這個結構是用于和C#方面的結構作個映射。

注意:代碼中的User*是個指針,返回也是一個對象指針,這樣做為了防止方法作用域結束后的局部變量的釋放。

strcpy是個復制char數組的函數。

11. 在CSharpDemo項目中CPPDLL類中補充代碼:

  1. [DllImport("CSharpInvokeCPP.CPPDemo.dll")]   
  2. public static extern IntPtr Create(string name, int age);   
  3.  [StructLayout(LayoutKind.Sequential)]   
  4.  public struct User   
  5.  {   
  6. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]   
  7. public string Name;   
  8. public int Age;   
  9.  }  

其中這里的結構User就和C++中的User對應。

12. 在Program.cs中補充代碼:

  1.  IntPtr ptr = CPPDLL.Create("李平", 27);   
  2.  <STRONG><FONT color=#ff0000>CPPDLL.User user = (CPPDLL.User)Marshal.PtrToStructure(ptr, typeof(CPPDLL.User));</FONT></STRONG>   
  3. Console.WriteLine("Name: {0}, Age: {1}", user.Name, user.Age);  

注意:紅色字體部分,這里結構指針首先轉換成IntPtr句柄,然后通過Marshal.PtrToStructrue轉換成你所需要的結構。

運行結果:

image 

原文鏈接:http://www.cnblogs.com/liping13599168/archive/2011/03/31/2000320.html

【編輯推薦】

  1. VS.NET 2010已經發布了beta2版本 新功能
  2. 初步了解Visual Studio 2010 Professional專業版
  3. Visual Studio 2010中使用MTLM管理測試工具
  4. Visual Studio 2010 SP1公測版已經發布
  5. Visual Studio 2010中敏捷開發流程模板的應用 
     
責任編輯:彭凡 來源: 博客園
相關推薦

2009-08-18 16:31:19

Visual C#編寫

2009-09-02 16:21:17

Visual BasiC#語言

2009-08-05 16:49:42

C#中調用dll

2010-06-01 13:32:15

Visual Stud

2009-08-24 15:58:00

Visual C#生成

2009-08-03 12:57:27

C#調用DLL

2009-12-02 09:43:38

Visual Stud

2009-07-02 10:07:24

C# 4.0的動態類型Visual Stud

2009-07-31 17:28:35

C#語言調用DLL

2009-08-07 17:22:36

C#調用dll導出函數

2010-01-26 14:10:22

Visual C++

2009-03-17 08:56:57

Visual StudVS2010C++

2009-11-10 13:43:37

Visual Stud

2010-04-01 09:06:05

C# 2010

2009-08-05 16:41:36

C#調用VC dll

2009-08-05 09:40:02

C#調用DLL函數

2009-09-02 17:16:01

冒泡排序

2009-08-05 09:30:39

C#調用DLL函數

2011-04-08 09:52:44

C++C#DLL

2010-05-14 15:05:38

Visual Stud
點贊
收藏

51CTO技術棧公眾號

国产一区二区在线免费播放| 91丝袜脚交足在线播放| 丰满少妇一区二区| 成人不卡视频| 亚洲综合色自拍一区| 久久久久综合一区二区三区| 在线观看国产精品视频| 欧美大片专区| 亚洲人成网站777色婷婷| 在线视频一二区| 欧美电影免费观看| 一区二区三区在线视频观看58| 欧美高清一区二区| 国产婷婷一区二区三区久久| 亚洲专区一区| 欧美另类99xxxxx| 五月婷六月丁香| 国产欧美三级电影| 欧美妇女性影城| 97成人在线观看视频| 国产原厂视频在线观看| 久久久亚洲综合| 成人免费91在线看| 一区二区三区免费在线| 久久精品导航| 午夜免费日韩视频| 欧美成人精品激情在线视频| 成人羞羞视频播放网站| 欧美在线网站| 欧美日韩免费网站| 韩国黄色一级大片| 成人动漫在线播放| ww亚洲ww在线观看国产| 91免费看网站| 亚洲综合精品视频| 日韩在线一区二区三区| 国模吧一区二区| 欧美另类视频在线观看| 天天射天天综合网| 亚洲一品av免费观看| 51调教丨国产调教视频| 亚洲乱码一区| 欧美一区二区三区视频在线| 爱爱爱爱免费视频| 91国拍精品国产粉嫩亚洲一区| 黑人巨大精品欧美一区二区| 亚洲 自拍 另类小说综合图区| 成人毛片av在线| 中文字幕一区二区三区av| 欧美激情论坛| 欧美女v视频| 久久精品在线免费观看| 久久国产精品免费一区| 无码精品在线观看| 26uuu亚洲| 久久精品99| 三级理论午夜在线观看| 91啪九色porn原创视频在线观看| 国内一区在线| 日本天堂在线| 国产人成一区二区三区影院| 亚洲7777| 在线中文字幕视频观看| 亚洲美女精品一区| 成人短视频在线观看免费| 日本孕妇大胆孕交无码| 亚洲一区二区三区视频在线 | 天天操天天插天天射| 9999精品| 日韩一区二区三区免费看| 性久久久久久久久久久久久久| 成人黄色91| 欧美成人三级在线| 中文字幕av观看| 成人aaaa| 久久国产视频网站| 国产精久久久久久| 久久精品女人天堂| 成人激情电影一区二区| 国产99视频在线| 99国产精品久久久久久久久久久| 蜜桃狠狠色伊人亚洲综合网站| 国产三级在线观看| 中文字幕在线免费不卡| 超碰10000| 小h片在线观看| 欧美日韩精品欧美日韩精品一 | 国产一级特黄a高潮片| 国产精品日韩精品欧美精品| 国产精品久久久久久五月尺| jizz中国少妇| 久久你懂得1024| 美女黄色片网站| 中文字幕色婷婷在线视频 | 奇米4444一区二区三区| 91污在线观看| 亚洲国产va精品久久久不卡综合| 日本国产中文字幕| 男女羞羞在线观看| 欧美日韩一区二区三区免费看| 中文字幕一区二区在线观看视频| 97久久精品| 国产亚洲一级高清| 免费看一级一片| 老司机久久99久久精品播放免费| 国产一区视频在线| 午夜成人免费影院| 中文字幕日韩一区| 国模吧无码一区二区三区| 在线欧美激情| 亚洲男人av在线| 永久久久久久久| 日一区二区三区| 国产成人免费电影| 91成人高清| 精品久久久一区| 91看片破解版| 日韩中文字幕高清| 韩日精品在线| 国产精自产拍久久久久久| 视频一区不卡| 国产精品日韩无码| 久久久精品人体av艺术| www.在线观看av| 国产精品一区二区美女视频免费看 | 日韩电影在线观看一区二区| 成人免费三级在线| 国产免费xxx| 亚洲欧洲二区| 中文综合在线观看| 自拍偷拍校园春色| 91蜜桃在线免费视频| 国产高清av在线播放| 日韩欧美高清一区二区三区| 久久久精品欧美| 中文字幕第三页| 欧美激情中文不卡| 黑鬼大战白妞高潮喷白浆| 美女视频免费精品| 欧美精品国产精品日韩精品| 99国产揄拍国产精品| 国产精品素人视频| 性金发美女69hd大尺寸| 911av视频| 99久久激情| 91精品国产综合久久香蕉922| 国产黄在线看| 在线看国产一区| 日本爱爱爱视频| 人人精品人人爱| 水蜜桃亚洲精品| 国产成人精品一区二区三区视频| 亚洲欧美制服丝袜| 日韩综合在线观看| 日本一区二区动态图| 久久黄色免费看| 日韩综合在线| 亚洲自拍高清视频网站| 69xxxx欧美| 欧美理论片在线| 美女福利视频在线观看| 国产成人在线影院| 亚洲熟妇无码一区二区三区导航| 精品福利一区| 日本成人精品在线| porn视频在线观看| 91精品在线一区二区| 丁香花五月激情| 成人一区二区三区视频在线观看 | 亚洲图片另类小说| 日本欧美韩国一区三区| 综合国产精品久久久| 欧美精品影院| 555www成人网| 五月婷婷在线视频| 精品国产网站在线观看| 日本韩国欧美中文字幕| 亚洲国产高清在线观看视频| 男女污污视频网站| 在线欧美不卡| 日本a级片久久久| 在线观看欧美| 性色av一区二区三区| 国产鲁鲁视频在线观看免费| 欧美肥胖老妇做爰| 日韩精品一区二区av| 国产精品丝袜久久久久久app| 韩国一区二区在线播放| 一区福利视频| 日韩国产在线一区| 99a精品视频在线观看| 伊人久久大香线蕉综合热线| 国产一区免费| 欧洲美女精品免费观看视频| 久久久久久久一区二区| 国产免费永久在线观看| 日韩午夜激情av| 欧产日产国产69| 亚洲精选在线视频| 国精产品一区二区三区| 国产黄色91视频| 北条麻妃av高潮尖叫在线观看| 久久精品国产68国产精品亚洲| 天天综合网 天天综合色| 五月天开心婷婷| 午夜亚洲一区| 久操手机在线视频| 日韩欧美不卡| 久久精品99久久| 亚洲成人黄色| 国产色婷婷国产综合在线理论片a| 成人ssswww在线播放| 久久久国产一区| 高清中文字幕一区二区三区| 亚洲成人网在线| 国产人妻精品一区二区三| 日韩欧美成人精品| 日韩三级av在线| 亚洲丝袜精品丝袜在线| 免费成人深夜天涯网站| 99麻豆久久久国产精品免费| 深爱五月综合网| 久久99精品久久久久久| 国产视频一区二区三区在线播放 | 欧美一级三级| 51午夜精品| 白嫩亚洲一区二区三区| 国产精品中文字幕在线| 国产精品扒开腿做爽爽爽视频软件| 久久免费福利视频| 久久五月精品中文字幕| 萌白酱国产一区二区| 黄色在线免费看| 最近的2019中文字幕免费一页| 黄色片在线播放| 精品亚洲一区二区三区| 少妇性bbb搡bbb爽爽爽欧美| 精品国精品国产尤物美女| 国产成人毛毛毛片| 91精品国产综合久久香蕉的特点 | 国产精品一区专区欧美日韩| 欧美成人资源| 欧洲亚洲在线视频| 亚洲日本天堂| 国产成人精品亚洲精品| 免费电影日韩网站| 日韩av免费网站| 欧美gay囗交囗交| 国产aⅴ夜夜欢一区二区三区| 成人性生交大片免费网站| 91av视频在线观看| 在线观看欧美日韩电影| 人人爽久久涩噜噜噜网站| 在线精品亚洲欧美日韩国产| 国产精品扒开腿做爽爽爽视频| 午夜日韩成人影院| 国产精品美女呻吟| 久久女人天堂| 91九色视频在线观看| 欧美激情精品| 精品视频一区二区| 神马电影久久| 国产福利片一区二区| 伊人久久大香线| 欧美男女爱爱视频| 久久久成人网| 九九热免费在线观看| 国产福利一区在线观看| 91视频啊啊啊| 国产三级精品在线| 看免费黄色录像| 亚洲成人免费在线| 国产精品一区二区三区四| 91豆麻精品91久久久久久| ,一级淫片a看免费| 精品福利一二区| 福利成人在线观看| 久久手机免费视频| 久久影院午夜精品| 国产精品欧美久久久| 日韩高清在线观看一区二区| 九9re精品视频在线观看re6| 欧美三级三级| www.69av| 久久一区亚洲| 亚洲精品一二三四| 91丨九色丨国产丨porny| 亚洲色图27p| 午夜精品久久久久久久蜜桃app| 无码一区二区三区在线观看| 91精品国产综合久久久蜜臀图片| 天天操天天操天天| 日韩视频第一页| 涩涩网在线视频| 亚洲最大av网站| 91在线观看喷潮| 国产日产欧美一区| 久久一级黄色片| 欧美性猛片xxxx免费看久爱| 亚洲第一天堂影院| 亚洲最新av在线网站| 手机av免费在线| 国产精品久久国产精品99gif| 草莓视频一区二区三区| 日韩三级电影网站| 最新亚洲激情| 久久久久亚洲av无码麻豆| 久久综合丝袜日本网| www.99re7| 欧美三级视频在线| 日本黄在线观看| 久久久久久av| 国产不卡精品| 一区二区三区欧美在线| 免费看的黄色欧美网站| 性活交片大全免费看| 综合色中文字幕| 波多野结衣视频在线观看| 亚洲电影免费观看高清完整版在线| 麻豆tv免费在线观看| 国产精品久在线观看| 一区二区导航| 国产精品50p| 成人动漫视频在线| 精品午夜福利在线观看| 91精品国产91综合久久蜜臀| 3d成人动漫在线| 国产精品久在线观看| 神马电影久久| 精品久久久久av| 91蝌蚪porny| 成人毛片18女人毛片| 日韩电影中文字幕一区| 国产精品一区二区日韩| 国产高清精品一区二区| 欧美日本一区二区视频在线观看 | 久久综合88中文色鬼| 欧美特黄色片| 一区二区三区四区视频在线| 免费高清视频精品| 日本美女xxx| 欧美系列亚洲系列| 99青草视频在线播放视| 国产精品激情av电影在线观看 | 亚洲最新中文字幕| 日韩中文在线播放| 水蜜桃一区二区三区| 蜜桃视频免费观看一区| 18啪啪污污免费网站| 欧美日本在线观看| 成人在线观看亚洲| 成人看片在线| 日韩精品福利| 欧美最新大片在线看| 成年人在线观看| 国产欧美久久久久久| 91欧美国产| 五月天国产视频| 亚洲不卡在线观看| 三级在线电影| 国产精品久久久久99| 国产精品毛片一区二区在线看| 久久久久久久久久久久久久久国产| 中文字幕一区二区三区精华液 | 日韩精品一区二区三| 精品一区二区三区四区| 91亚洲视频| 黄色网zhan| 99免费精品在线| 中文字幕在线观看精品| 久久综合久中文字幕青草| 久久av国产紧身裤| 一本久道综合色婷婷五月| 中文字幕日本乱码精品影院| 精品国产免费无码久久久| 91精品国产91久久久久久久久| 欧美女优在线视频| 在线观看免费不卡av| 一区二区三区不卡视频在线观看| 色窝窝无码一区二区三区成人网站| 日本中文字幕不卡免费| 水蜜桃久久夜色精品一区| 无码人妻一区二区三区精品视频| 欧美日韩激情美女| 三级外国片在线观看视频| 国产精品日韩一区二区| 日韩精品国产欧美| 免费视频网站www| 亚洲丝袜在线视频| 亚洲成人黄色| 欧美黄色性生活| 亚洲成av人片一区二区三区| 91在线免费看| 国产一区二区三区四区五区加勒比| 天使萌一区二区三区免费观看| 手机在线免费看毛片| 亚洲美女精品久久| 亚洲国产一区二区三区网站| 国产视频一区二区视频| 亚洲图片一区二区|