IntPtr是什麼,該怎麼用

2021-06-05 21:30:37 字數 1083 閱讀 9735

intptr 型別被設計成整數,其大小適用於特定平台。即是說,此型別的例項在 32 位硬體和作業系統中將是 32 位,在 64 位硬體和作業系統上將是 64 位。

intptr 型別可以由支援指標的語言使用,並可作為在支援與不支援指標的語言間引用資料的一種通用方式。

intptr 物件也可用於保持控制代碼。例如,intptr 的例項廣泛地用system.io.filestream 類中來保持檔案控制代碼。

intptr 型別符合 cls,而 uintptr 型別卻不符合。只有 intptr 型別可用在公共語言執行庫中。uintptr 型別大多數是提供來維護與 intptr 型別之間的體系結構上的對稱性。

例: 乙個c#程式呼叫win32api mcisendstring函式控制光碟驅動器,這個函式的函式原型是:

mcierror mcisendstring(

lpctstr lpszcommand,

lptstr lpszreturnstring,

uint cchreturn,

handle hwndcallback);

首先在c#中宣告這個函式:

[dllimport("winmm.dll")]

private static extern long mcisendstring(string a,string b,uint c,intptr d);

然後用這樣的方法呼叫:

mcisendstring("set cdaudio door open", null, 0, this.handle);

也可以使用intptr.zero將控制代碼設定為0;

或者使用型別強制轉換:

mcisendstring("set cdaudio door open", null, 0, (intptr)0 );

或者,使用intptr建構函式:

intptr a = new intptr(2121);

注意:一、在c#中宣告win32api時,一定要按照winapi的原型來宣告,不要改變它的資料型別;

二、盡量不要過多使用型別強制轉換或建構函式的方式初始化乙個intptr型別的變數,這樣會使程式變得難於理解並容易出錯

**

ThreadLocal是什麼?怎麼用?

threadlocal用於儲存某個執行緒共享變數 對於同乙個static threadlocal,不同執行緒只能從中get,set,remove自己的變數,而不會影響其他執行緒的變數。簡單的使用 public class threadlocaltestpublic class mytest exte...

Context是什麼,怎麼用

開始學安卓的時候發現經常有context,但是都不知道為什麼,什麼時候需要它。官方文件概述 關於應用程式環境的全域性資訊的介面。這是乙個抽象類,它的實現是由安卓系統提供的。它允許訪問應用程式特定的資源和類,以及應用級的操作,如啟動活動,廣播和接收的意圖,等等。我感覺可以把context比喻成乙個遊樂...

RESTful是什麼,為什麼用,怎麼用

restful是什麼 其實restful絕大部分內容都是關於api設計時規範推薦的做法,並沒有新東西。只要符合rest設計原則的api都可以被稱為restful。restful的核心就是後端將資源發布為uri,前端通過uri訪問資源,並通過http動詞表示要對資源進行的操作。這裡涉及到乙個新概念 資...