自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

玩轉(zhuǎn)C++ 托管技術(shù)簡(jiǎn)介

開發(fā) 后端
ExactSpelling 字段為 false(它是 C++ 托管擴(kuò)展和 C# 中的默認(rèn)值),平臺(tái)調(diào)用將首先搜索未處理的別名 (MessageBox),如果沒有找到未處理的別名。

上網(wǎng)baidu一下或google一下這個(gè)東東就有很多人在問這個(gè)問題,最近我也用到了這個(gè),所以就留下來以備往后需要是可以查找。我想通過這個(gè)來作為C#調(diào)用windows APIs的出發(fā)點(diǎn),在以后的隨筆當(dāng)中介紹一下我現(xiàn)階段用到的一些APIs或非托管類庫(kù)。

在調(diào)用非托管DLL的APIs前,我們應(yīng)該好好掌握一下DllImportAttribute,MSDN給出的定義為:可將該屬性應(yīng)用于方法。DllImportAttribute 屬性提供對(duì)從非托管 DLL 導(dǎo)出的函數(shù)進(jìn)行調(diào)用所必需的信息。作為最低要求,必須提供包含入口點(diǎn)的 DLL 的名稱。

  1.  1 using System;  
  2.  2 using System.Runtime.InteropServices;  
  3.  3 public delegate bool CallBack(int hwnd, int lParam);  
  4.  4 public class EnumReportApp {  
  5.  5 [DllImport("user32")]  
  6.  6 public static extern int EnumWindows(CallBack x, int y);  
  7.  7 public static void Main()  
  8.  8 {  
  9.  9 CallBack myCallBack = new CallBack(EnumReportApp.Report);  
  10. 10 EnumWindows(myCallBack, 0);  
  11. 11 }  
  12. 12 public static bool Report(int hwnd, int lParam) {  
  13. 13 Console.Write("窗口句柄為");  
  14. 14 Console.WriteLine(hwnd);  
  15. 15 return true;  
  16. 16 }  
  17. 17 } 

從上面的例子中我們可以看出,從Kernel32.dll中引入這個(gè)API,其中EntryPoint一看就知道是入口點(diǎn),也就是DLL中的函數(shù)名稱。其實(shí)只要用過VC++的人都知道,Windows APIs中都提供兩個(gè)版本,一個(gè)是W,一個(gè)是A也就是Ansi和Unicode之分,現(xiàn)在一般都采用W,Unicode編程,但是.Net和win32交互的時(shí)候,默認(rèn)是使用CharSet.Ansi來傳送。在 DllImportAttribute.ExactSpelling 字段為 true 時(shí)(它是 Visual Basic .NET 中的默認(rèn)值)。

平臺(tái)調(diào)用將只搜索您指定的名稱。例如,如果指定 MessageBox,則平臺(tái)調(diào)用將搜索 MessageBox,如果它找不到完全相同的拼寫則失敗。當(dāng) ExactSpelling 字段為 false(它是 C++ 托管擴(kuò)展和 C# 中的默認(rèn)值),平臺(tái)調(diào)用將首先搜索未處理的別名 (MessageBox),如果沒有找到未處理的別名,則將搜索已處理的名稱 (MessageBoxA)。#t#

我們可以通過創(chuàng)建一個(gè)代理,它帶有兩個(gè)參數(shù)hwnd和lparam,第一個(gè)參數(shù)是一個(gè)窗口句柄,第二個(gè)參數(shù)由應(yīng)用程序定義,兩個(gè)參數(shù)均為整形。當(dāng)這個(gè)回調(diào)函數(shù)返回一個(gè)非零值時(shí),標(biāo)示執(zhí)行成功,零則暗示失敗,這個(gè)例子總是返回True值。以便持續(xù)枚舉。最后創(chuàng)建以代理對(duì)象(delegate),并把它作為一個(gè)參數(shù)傳遞給EnumWindows 函數(shù),平臺(tái)會(huì)自動(dòng)地 把代理對(duì)象轉(zhuǎn)化成函數(shù)能夠識(shí)別的回調(diào)格式。

OK,如果熟悉了以上方方面面,基本上也能夠調(diào)用APIs了別忘了P/Invoke能夠幫上很大的忙,我們可以去wiki網(wǎng)站查詢我們所要的API:http://pinvoke.net。還需要說明的是很多例子等都來自MSDN和網(wǎng)上檢索得到的?。?!

責(zé)任編輯:chenqingxiang 來源: linux
相關(guān)推薦

2010-01-25 15:55:50

托管C++

2010-01-15 18:57:58

C++CLI

2011-05-18 18:05:47

C#C++

2011-05-18 17:56:38

C#C++

2010-01-18 15:40:37

Visual C++工

2010-01-13 17:04:36

C++語言

2010-02-05 14:51:48

C++托管

2010-02-06 17:16:49

C++托管程序

2010-01-18 16:27:26

C++語言

2010-01-18 10:53:26

2011-07-15 00:47:13

C++多態(tài)

2010-01-22 14:46:25

C++語言

2010-02-05 15:04:41

C++定義變量

2010-02-06 11:13:11

C++ makefil

2010-01-28 10:07:52

C++手冊(cè)

2010-02-06 14:12:54

C++繼承方式

2010-01-19 18:18:21

C++語言

2023-12-15 10:14:38

C++模板編程

2010-01-21 09:46:24

C++程序

2010-01-15 10:14:21

C++ Builder
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)