當前位置:首頁 » 服務存儲 » api存儲參數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

api存儲參數

發布時間: 2022-09-10 12:49:14

Ⅰ 如何在VB中使用API函數

什麼是API/怎樣在VB中聲明和使用API函數
(簡單來說,API就是應用程序介面)
一、在VB中聲明API函數有兩種方法:如果我們只在某個窗體中使用API函數,我們可以在窗體代碼的General部分聲明它:

聲明的語法是:
Private Declare Function ...
Private Declare Sub.....
這里必須採用Private聲明,因為這個API函數只能被一個窗體內的程序所調用。

如果我們的程序有多個窗體構成,而且我們需要在多個窗體中使用同一個API函數,就需要在模塊中聲明了。
先添加一個模塊(如圖示),
然後採用如下語法聲明:
Public Declare Function....
Public Declare Sub....
Public聲明的含義是把API函數作為一個公共函數或過程,在一個工程中的任何位置(包括所有的窗體和模塊)都能直接調用它。 聲明完畢我們就能在程序中使用此API函數了。

二、可採用以下幾種方式使用API函數,以SetWindowPos函數為例:
(1)忽略函數返回值的調用:
SetWindowPos Form1.hWnd, -2 ,0 ,0 ,0, 0, 3
注意此時函數的參數是不加括弧的。
(2)Call方法調用:
Call SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3)
注意這里需要加上括弧,但我們不取回函數的返回值。
(3)取得函數返回值的調用:
MyLng = SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3)
此時需要加上括弧,而且我們必須事先定義一個變數(變數的類型與函數返回值類型相同)來存儲API函數的返回值。

三、幾個問題的說明:

(1)聲明中的Lib 和 Alias 是怎麼回事
一般情況下WIN32API函數總是包含在WINDOWS系統自帶的或是其它公司提供的動態連接庫DLL中,而Declare語句中的Lib關鍵字就用來指定DLL(動態連接庫)文件的路徑,這樣VB才能找到這個DLL文件,然後才能使用其中的API函數。如果我們只是列出DLL文件名而不指出其完整的路徑的話,VB會自動到.EXE文件所在目錄、當前工作目錄、WINDOWS\SYSTEM目錄、WINDOWS目錄下搜尋這個DLL文件。所以如果所要使用DLL文件不在上述幾個目錄下的話,我們應該指明其完整路徑。
Alias用於指定API函數的別名,如果我們調用的API函數要使用字元串(參數中包含String型)的話,Alias關鍵字是必須的。這是因為在ANSI和Unicode字元集中同一API函數的名稱可能是不一樣的,為了保證不出現聲明錯誤,我們使用Alias關鍵字指出API函數的別名,一般來說在WIN9X平台下我們把API函數名後加一個大寫A作為別名即可。

(2)常見的API參數類型的說明
API函數的參數中最常見的是長整Long型數據類型,例如API中的句柄、一些特定的常量、函數的返回值都是此類型 的值;另外幾種常見的參數類型有:整型Integer、Byte型、String型等。

(3)聲明中的ByVal是作什麼用的
這跟VB的參數傳遞方式有關,在默認情況下VB是通過地址傳遞方式傳遞函數的參數、而有些API函數要求必須採用傳值方式來傳遞函數參數(這兩種參數傳遞方式是不同的,前者傳遞的是一個指針,而後者要求是參數真實的值)。這樣就會發生錯誤,解決的辦法是在API函數參數聲明的前面加上ByVal關鍵字,這樣VB就採用傳值方式傳遞參數了。

(4)怎樣得到完整的API函數聲明
VB自帶了API文本查看器API TEXT VIEWER,我們可以在其中找到API函數的完整聲明,然後把它粘貼到程序中即可。

Ⅱ windows api的一些參數數值

3.2.3 API參數中的等值定義

再回過頭來看顯示消息框的語句:

invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK

在uType這個參數中使用了MB_OK,這個MB_OK是什麼意思呢,先來看《Microsoft Win32 Programmer's Reference》中的說明:

uType —— 定義對話框的類型,這個參數可以是以下標志的合集:

要定義消息框上顯示按鈕,用下面的某一個標志:

MB_ABORTRETRYIGNORE —— 消息框有三個按鈕:「終止」,「重試」和「忽略」

MB_HELP —— 消息框上顯示一個「幫助」按鈕,按下後發送WM_HELP消息

MB_OK —— 消息框上顯示一個「確定」按鈕,這是默認值

MB_OKCANCEL —— 消息框上顯示兩個按鈕:「確定」和「取消」

MB_RETRYCANCEL —— 消息框上顯示兩個按鈕:「重試」和「忽略」

MB_YESNO —— 消息框上顯示兩個按鈕:「是」和「否」

MB_YESNOCANCEL —— 消息框上顯示三個按鈕:「是」、「否」和「取消」

要在消息框中顯示圖標,用下面的某一個標志:

MB_ICONWARNING —— 顯示驚嘆號圖標

MB_ICONINFORMATION —— 顯示消息圖標

MB_ICONASTERISK —— 顯示危險圖標

MB_ICONQUESTION —— 顯示問號圖標

MB_ICONSTOP —— 顯示停止圖標

……

這些是uType參數說明中的一小半,可以看出,參數中可以用的值有很多種,讓我們換一個值試試看,把語句改為:

invoke MessageBox,NULL,offset szText,\

offset szCaption, MB_ICONWARNING or MB_YESNO

再編譯執行看,屏幕上出現了一個不一樣的消息框,如圖3.3所示。

圖3.3 另一個消息框

和參數說明中的一樣!消息框中出現了一個驚嘆號圖標,按鈕也變成了「是」和「否」兩個按鈕!MB_ICONWARNING和MB_YESNO等參數究竟是什麼意思呢,MASM中顯然沒有這樣的預定義,讓我們先來找Visual C++的頭文件,在WinUser.h中可以找到下面一段:

/*

* MessageBox() Flags

*/

#define MB_OK Ox00000000L

#define MB_OKCANCEL Ox00000001L

#define MB_ABORTRETRYIGNORE Ox00000002L

#define MB_YESNOCANCEL Ox00000003L

#define MB_YESNO Ox00000004L

#define MB_RETRYCANCEL Ox00000005L

#define MB_ICONHAND Ox00000010L

#define MB_ICONQUESTION Ox00000020L

#define MB_ICONEXCLAMATION Ox00000030L

#define MB_ICONASTERISK Ox00000040L

#if(WINVER >= Ox0400)

#define MB_USERICON Ox00000080L

#define MB_ICONWARNING MB_ICONEXCLAMATION

#define MB_ICONERROR MB_ICONHAND

#endif /* WINVER >= 0x0400 */

#define MB_ICONINFORMATION MB_ICONASTERISK

#define MB_ICONSTOP MB_ICONHAND

……

顯然,MB_YESNO就是4,MB_ICONWARNING就是30h,默認的MB_OK就是0,Win32 API的參數使用這樣的定義方法是為了免除程序員死記數值定義的麻煩。在編寫Win32匯編程序時,MASM32工具包中的Windows.inc也包括了所有這些參數的定義,只要在程序的開頭包含這個定義文件:

include windows.inc

就可以方便地完全按照API手冊來使用Win32函數。

打開\masm32\include目錄下的Windows.inc查看一下,可以發現整個文件總共有兩萬六千多行,包括了幾乎所有的Win32 API參數中的常量和數據結構定義。正是有了這個文件中詳盡的定義,Win32ASM才得以流行起來,試想一下,哪個程序員願意每使用一個API語句,就到函數手冊中去看參數,然後到Microsoft發布的Visual C++的頭文件中去找對應的數值,再應用到匯編源程序中?這樣會有80%以上的時間花在做無用功上(最後還是要罵Microsoft為什麼不提供匯編格式的頭文件,畢竟MASM32工具包不是Microsoft出的)。

有時候由於版本的原因,當使用最新的API手冊時,會發現有些參數使用的常量在Windows.inc中並沒有定義,這下慘了,誰都不知道類似於MB_XXXYYY的東西代表什麼數值,Microsoft的《Microsoft Programmer's Reference》手冊中從來就不會把參數對應的數值寫進去。遇到這種情況,只有拿出最原始的辦法了,就是到最新的Visual C++或SDK的include目錄中去,在C語言格式的 .h頭文件中把定義找出來,然後自行增補到Windows.inc中去。如果這樣也找不到定義值的話,那隻好放棄使用這個API了。

Ⅲ 解釋下VB里的API函數及作用

什麼是API

首先,有必要向大家講一講,什麼是API。所謂API本來是為C和C++程序員寫的。API說來說去,就是一種函數,他們包含在一個附加名為DLL的動態連接庫文件中。用標準的定義來講,API就是Windows的32位應用程序編程介面,是一系列很復雜的函數,消息和結構,它使編程人員可以用不同類型的編程語言編制出的運行在Windows95和Windows NT操作系統上的應用程序。可以說,如果你曾經學過VC,那麼API對你來說不是什麼問題。但是如果你沒有學過VC,或者你對Windows95的結構體系不熟悉,那麼可以說,學習API將是一件很辛苦的事情。

如果你打開WINDOWS的SYSTEM文件夾,你可以發現其中有很多附加名為DLL的文件。一個DLL中包含的API函數並不只是一個,數十個,甚至是數百個。我們能都掌握它嘛?回答是否定的∶不可能掌握。但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統本身自帶的API函數就可以了。但,在其中還應當拋開掉同VB本身自有的函數重復的函數。如,VB
的etAttr命令可以獲得文件屬性,SetAttr可以設置文件屬性。對API來講也有對應的函數
GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下來的也就5、600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那麼你的編程水平比現在高出至少要兩倍。盡管人們說VB和WINDOWS具有密切的關系,但我認為,API更接近
WINDOWS。如果你學會了API,首要的收獲便是對WINDOWS體系結構的認識。這個收獲是來自不易的。

如果你不依靠API會怎麼樣?我可以跟你說,絕大多是高級編程書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對象是具有一定VB基礎的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救∶我快死了,快來救救我呀,這個怎麼辦,那個怎麼辦?煩不煩呢?當然,現在網上好人太多(包括我在內,嘻嘻),但,你應當明白,通過此途徑,你的手中出不了好的作品。這是因為缺乏這些知識你的腦子里根本行不成一種總體的設計構思。
API文本游覽器 [返回]

很多API函數都是很長很長的。想看什麼樣子嗎?如下就是作為例子的API DdeClientTransaction函數∶
Declare Function DdeClientTransaction Lib "user32" (pData As Byte, ByVal cbData As Long, ByVal hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout As Long, pdwResult As Long) As Long
哇!這么長?如果你從來沒有接觸過API,我想你肯定被嚇住了。你也許考慮,該不該繼續學下去。不過不要擔心,幸運的是Microsoft的設計家們為我們提供了有用的工具,這便是API
文本查看器。

通過API文本查看器,我們可以方便地查找程序所需要的函數聲明、結構類型和常數,然後將它復制到剪貼板,最後再粘貼到VB程序的代碼段中。在大多數情況下,只要我們確定了程序所需要的函數、結構和常數這三個方面後,就可以通過對API文本游覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數了。這些是學習API最基本的常識問題,它遠遠占不到API的龐大的體系內容。今後我們把精力浪費(這絕不是浪費)在哪裡呢?那就是∶
什麼時候使用什麼函數,什麼時候使用什麼結構類型,什麼時候使用什麼常數。
API函數聲明

讓我們回想一下。在VB中,如何聲明函數呢?我想,如果你正在看此文,那麼你絕對能夠回答得出這個問題。以下便是你應該很熟悉的函數聲明∶
Function SetFocus (ByVal hwnd As Long) As Long
即,這行代碼定義了名為SetFocus的函數,此函數具有一個Long型數據類型的參數,並按值傳遞(ByVal),函數執行後將返回一個Long型數據。
API函數的聲明也很類似,如,API中的SetFocus 函數是這樣寫的∶

Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
有點復雜了一些。是的,是復雜了點。但我可以告訴你,除了這些多出來的部分,其他部分還是和你以前學到的東西是一樣的。函數在程序中的調用也是一樣。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一點是清楚的。它不象你自己寫的程序那樣能夠看到裡面的運行機理,也不像VB
自帶的函數那樣,能夠從VB的聯機幫助中查到其用法。唯一的方法就是去學、查VB以外的資料。

Declare 語句用於在模塊級別中聲明對動態鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數聲明都必須寫這個語句就可以了。
Iib 指明包含所聲明過程或函數的動態鏈接庫或代碼資源。也就是說,它說明的是,函數或過程從何而來的問題。
如在上例中,SetFocus Lib "user32"說明 函數 SetFocus 來自 user32.dll文件。主要的dll動態連接庫文件有∶
user32.dll Windows管理。生成和管理應用程序的用戶介面。

GDI32.dll 圖形設備介面。產生Windows設備的圖形輸出
Kernel32.dll 系統服務。訪問操作系統的計算機資源。
注意,當DLL文件不在Windows或System文件夾中的時候,必須在函數中說明其出處(
路徑)。如,SetFocus Lib "c:\Mydll\user32"
函數聲明中的Alias 是可選的。表示將被調用的過程在動態鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetFocus" ,說明SetFocus函數在User32.dll中的另外一個名稱是,
SetFocus。怎麼兩個名都一樣呢?當然,也可以是不同的。在很多情況下,Alias說明的函數名,即別名最後一個字元經常是字元A,如SetWindowsText函數的另一個名稱是
SetWindowsTextA,表示為Alias "SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數屬於ANSI版本。

那麼,別名究竟有什麼用途呢?從理論上講,別名提供了用另一個名子調用API的函數方法。如果你指明了別名,那麼 盡管我們按Declare語句後面的函數來調用該函數,但在函數的實際調用上是以別名作為首要選擇的。如,以下兩個函數(Function,ABCD)聲明都是有效的,他們調用的是同一個 SetFocus函數∶
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

需要注意的是,選用Alias的時候,應注意別名的大小寫;如果不選用Alias 時的時候,函數名必須注意大小寫,而且不能改動。當然,在很多情況下,由於函數聲明是直接從API
文本游覽器中拷貝過來的,所以這種錯誤的發生機會是很少的,但您有必要知道這一點。
最後提醒你一句,API聲明(包括結構、常數)必須放在窗體或模塊的"通用(General Declarations)段。
數據類型與"類型安全"

API函數中使用的數據類型基本上和VB中的一樣。但作為WIN32的API函數中,不存在Integer
數據類型。另外一點是在API函數中看不到Boolean數據類型。 Variant數據類型在API函數中是以Any的形式出現,如Data As Any。盡管其含義是允許任意參數類型作為一個該API函數的參數傳遞,但這樣做存在一定的缺點。其原因是,這將會使得對目標參數的所有類型檢查都會被關閉。這自然會給各種類型的參數調用帶來了產生錯誤的機會。

為了強制執行嚴格的類型檢查,並避免上面提到的問題,一個辦法是在函數里使用上面提到到Alias技術。如對API函數 GetDIBits 可進行另外一種聲明方法。如下∶
GetDIBits函數的原型∶
Public Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
GetDIBits函數的改型∶

Public Declare Function GetDIBitsLong Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
通過本課程前面所學到的知識,我們已經可以得知原型 GetDIBits函數也好,改型 GetDIBitsLong函數也好,實際將調用的都是Alias所指定的 GetDIBits原函數。但你應當看到,兩者的區別在於,我們在改型的函數中強制指定lpBits參數為Long形。這樣就會使得函數調用中發生的錯誤機率減少到了最小。這種方法叫做"安全類型"聲明。

API函數中經常看到的數據類型有∶Long,String,Byte,Any....(也就這些吧。)
常 數

對於API常數來講,沒有什麼太特別的學問。請看VB中的以下代碼∶
Msg = MsgBox("您好", vbOKCancel)
我們知道, vbOKCancel這個常數的值等於1。對上面的代碼我們完全可以這樣寫,而不會影響代碼的功能∶
Msg = MsgBox("您好", 1)
但你大概不太願意選擇後一種,因為這會使得看懂代碼費勁起來。這種方法也被API採取了。只是API常數必須在事情之前做好初始化聲明VB本身是看不懂的。其內容仍然來自與API
文本游覽器。具體形式如下等等∶

Public Const ABM_ACTIVATE = &H6
Public Const RIGHT_CTRL_PRESSED = &H4
Public Const RPC_E_SERVER_DIED = &H80010007
Private Const RPC_S_CALL_FAILED_DNE = 1727&
在常數的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE = &H6,但我認為Public完全可以代替它。過去我也用過Global,但現在不大用了。一會兒用這個,一會兒用那個,各程序之間不能保持一致性了,起碼看起來別扭。
結 構 [返回]

結構是C和C++語言中的說法。在VB中一般稱為自定義數據類型。想必很多朋友都已經認識它。在API領域里,我更喜歡把它叫做結構,因為API各種結構類型根本不是我定義(
自定義)的。
在VB中,API結構同樣由TYPE.......END TYPE語句來定義。如,在API中,點(Point)結構的定義方法如下:
Public Type POINTAPI
X As Long '點在X坐標(橫坐標)上的坐標值

Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
又如,API中矩形(Rect)結構的定義如下∶
Public Type RECT
Left As Long '矩形左上角的X坐標
Top As Long '矩形左上角的Y坐標
Right As Long '矩形右下角的X坐標
Bottom As Long '矩形右下角的Y坐標

End Type
這些內容同樣可以從API文本游覽器中拷貝過來。這些結構中的變數名可隨意改動,而不會影響結構本身。也就是說,這些成員變數都是虛擬的。如,POINTAPI結構可改為如下∶
Public Type POINTAPI
MyX As Long '點在X坐標(橫坐標)上的坐標值
MyY As Long '點在Y坐標(縱坐標)上的坐標值
End Type
不過,一般來講,是沒有這種必要的。結構本身是一種數據類型,因此,使用時必須聲明具體變數為該結構型,才能在程序中真正使用到該結構。結構的聲明方法和其他數據的聲明方法一樣,如,以下語句把變MyPoint聲明為POINTAPI結構類型∶

MyPoint As POINTAPI
引用結構中的成員變數也十分簡單,在結構名後面加上一個".",然後緊接著寫要引用的成員變數即可。這很象VB中的引用一個對象的某個屬性。如,假如我們把上面已經聲明的MyPoint結構中的X變數的值賦給變數Temp&
則代碼如下∶
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認為上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結構要求按引用傳遞給WINDOWS函數,即所有API
函數中,結構都是按ByRef傳遞的(在Declare語句 中ByRef是默認型)。對於結構的傳遞,你不要試圖採用ByVal,你將一無所獲。由於結構名實際上就是指向這個結構的指針(這個結構的首地址),所以,你也就傳送特定的結構名就可以了(參見小結,我用紅色字體來突出了這種傳遞方式)。

由於結構傳送的是指針,所以函數將直接對結構進行讀寫操作。這種特性很適合於把函數執行的結果裝載在結構之中。
小 結 [返回]

以下的程序是為了總結本課中學到的內容而給出的。啟動VB,新建一個項目,添加一個命令按鈕,並把下面的代碼拷貝到代碼段中,運行它。

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '定義點(Point)結構
X As Long '點在X坐標(橫坐標)上的坐標值
Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
Sub PrintCursorPos( )
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&= GetCursorPos(MyPoint) '調用函數,獲取屏幕滑鼠坐標

Debug.Print "X=" & Str(MyPoint.X) & " and " & "Y=" & Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos

End Sub

輸出結果為(每次運行都可能得到不同的結果,這得由函數調用時滑鼠指針在屏幕中所處的位置而決定)∶
X= 240 and Y= 151

程序中,GetCursorPos函數用來獲取滑鼠指針在屏幕上的位置。

以上例子中,你可以發現,以參數傳遞的MyPpint結構的內容在函數調用後發生了實質性變化。這是由於結構是按ByRef傳遞的原因。
一些API函數集

Ⅳ API函數的參數問題

由系統傳遞的參數 這種函數叫回調函數 若想知道函數的參數代表的意義和返回值的意義要查閱相關文檔 C/C++ mfc windows api 這些查閱MSDN 或者直接把函數名google搜索一把就知道了

Ⅳ 關於API部份參數問題如句柄

這里的hwnd是指父窗體句柄,一般就用程序所在窗體句柄(即Me.hwnd)即可,也可設為0
設定父窗體的意義之一在於當系統關閉父窗體時,其下屬子窗體(含彈出對話框)也會被關閉;此外子窗體也會繼承父窗體的一些屬性。

Ⅵ java api操作hbase存儲數據為16進制如何設置存儲為正常數值

一般情況下,我們使用Linux的shell命令,就可以非常輕松的操作Hbase,例如一些建表,建列簇,插值,顯示所有表,統計數量等等,但有時為了提高靈活性,我們也需要使用編程語言來操作Hbase,當然Hbase通過Thrift介面提供了對大多數主流編程語言的支持,例如C++,PHP,Python,Ruby等等,那麼本篇,散仙給出的例子是基於Java原生的API操作Hbase,相比其他的一些編程語言,使用Java操作Hbase,會更加高效一些,因為Hbase本身就是使用Java語言編寫的。轉載
下面,散仙給出源碼,以供參考:

package com.hbase;

import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

/**
* @author 三劫散仙
*
* **/
public class Test {

static Configuration conf=null;
static{

conf=HBaseConfiguration.create();//hbase的配置信息
conf.set("hbase.zookeeper.quorum", "10.2.143.5"); //zookeeper的地址

}

public static void main(String[] args)throws Exception {

Test t=new Test();
//t.createTable("temp", new String[]{"name","age"});
//t.insertRow("temp", "2", "age", "myage", "100");
// t.getOneDataByRowKey("temp", "2");
t.showAll("temp");

}

/***
* 創建一張表
* 並指定列簇
* */
public void createTable(String tableName,String cols[])throws Exception{
HBaseAdmin admin=new HBaseAdmin(conf);//客戶端管理工具類
if(admin.tableExists(tableName)){
System.out.println("此表已經存在.......");
}else{
HTableDescriptor table=new HTableDescriptor(tableName);
for(String c:cols){
HColumnDescriptor col=new HColumnDescriptor(c);//列簇名
table.addFamily(col);//添加到此表中
}

admin.createTable(table);//創建一個表
admin.close();
System.out.println("創建表成功!");
}
}

/**
* 添加數據,
* 建議使用批量添加
* @param tableName 表名
* @param row 行號
* @param columnFamily 列簇
* @param column 列
* @param value 具體的值
*
* **/
public void insertRow(String tableName, String row,
String columnFamily, String column, String value) throws Exception {
HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(row));
// 參數出分別:列族、列、值
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column),
Bytes.toBytes(value));

table.put(put);
table.close();//關閉
System.out.println("插入一條數據成功!");
}

/**
* 刪除一條數據
* @param tableName 表名
* @param row rowkey
* **/
public void deleteByRow(String tableName,String rowkey)throws Exception{
HTable h=new HTable(conf, tableName);
Delete d=new Delete(Bytes.toBytes(rowkey));
h.delete(d);//刪除一條數據
h.close();
}

/**
* 刪除多條數據
* @param tableName 表名
* @param row rowkey
* **/
public void deleteByRow(String tableName,String rowkey[])throws Exception{
HTable h=new HTable(conf, tableName);

List<Delete> list=new ArrayList<Delete>();
for(String k:rowkey){
Delete d=new Delete(Bytes.toBytes(k));
list.add(d);
}
h.delete(list);//刪除
h.close();//釋放資源
}

/**
* 得到一條數據
*
* @param tableName 表名
* @param rowkey 行號
* ***/
public void getOneDataByRowKey(String tableName,String rowkey)throws Exception{
HTable h=new HTable(conf, tableName);

Get g=new Get(Bytes.toBytes(rowkey));
Result r=h.get(g);
for(KeyValue k:r.raw()){

System.out.println("行號: "+Bytes.toStringBinary(k.getRow()));
System.out.println("時間戳: "+k.getTimestamp());
System.out.println("列簇: "+Bytes.toStringBinary(k.getFamily()));
System.out.println("列: "+Bytes.toStringBinary(k.getQualifier()));
//if(Bytes.toStringBinary(k.getQualifier()).equals("myage")){
// System.out.println("值: "+Bytes.toInt(k.getValue()));
//}else{
String ss= Bytes.toString(k.getValue());
System.out.println("值: "+ss);
//}

}
h.close();

}

/**
* 掃描所有數據或特定數據
* @param tableName
* **/
public void showAll(String tableName)throws Exception{

HTable h=new HTable(conf, tableName);

Scan scan=new Scan();
//掃描特定區間
//Scan scan=new Scan(Bytes.toBytes("開始行號"),Bytes.toBytes("結束行號"));
ResultScanner scanner=h.getScanner(scan);
for(Result r:scanner){
System.out.println("==================================");
for(KeyValue k:r.raw()){

System.out.println("行號: "+Bytes.toStringBinary(k.getRow()));
System.out.println("時間戳: "+k.getTimestamp());
System.out.println("列簇: "+Bytes.toStringBinary(k.getFamily()));
System.out.println("列: "+Bytes.toStringBinary(k.getQualifier()));
//if(Bytes.toStringBinary(k.getQualifier()).equals("myage")){
// System.out.println("值: "+Bytes.toInt(k.getValue()));
//}else{
String ss= Bytes.toString(k.getValue());
System.out.println("值: "+ss);
//}

}
}
h.close();

}

}

Ⅶ API函數Sendmessage的wParam和lParam參數是什麼

這要視message類型而定。

以獲取文字WM_GETTEXT來說,lParam為指向用戶存儲得到的字元串的Buffer的指針,wParam為最多允許復制的字元數(包含結束符)。SendMessage的返回值是實際復制的字元數(不包含結束符)。例如:

#defineBUFFER_SIZE1024

charbuffer[BUFFER_SIZE];
memset(buffer,0,sizeof(buffer));

LRESULTlength=SendMessage(hWnd,WM_GETTEXT,BUFFER_SIZE,(LPARAM)buffer);
buf[length]='';

Ⅷ API是什麼意思API文檔又是什麼意思

API(Application Programming Interface,應用程序編程介面)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體得以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。

API文檔是一個技術內容交付文件,包含如何有效地使用和集成api的說明。它是一個簡明的參考手冊,包含了使用API所需的所有信息,詳細介紹了函數、類、返回類型、參數等,並有教程是示例支撐。

API文檔傳統上是使用常規內容創建和維護工具和文本編輯器完成的。API描述格式如OpenAPI /Swagger規范具有自動文檔編制流程,它使得團隊更容易生成和維護API文檔。

(8)api存儲參數擴展閱讀:

Windows API

API函數包含在Windows系統目錄下的動態連接庫文件中。Windows API是一套用來控制Windows的各個部件的外觀和行為的預先定義的Windows函數。用戶的每個動作都會引發一個或幾個函數的運行以告訴Windows發生了什麼。

這在某種程度上很像Windows的天然代碼。而其他的語言只是提供一種能自動而且更容易的訪問API的方法。當你點擊窗體上的一個按鈕時,Windows會發送一個消息給窗體,VB獲取這個調用並經過分析後生成一個特定事件。

更易理解來說:Windows系統除了協調應用程序的執行、內存的分配、系統資源的管理外,同時他也是一個很大的服務中心。

調用這個服務中心的各種服務(每一種服務就是一個函數)可以幫助應用程序達到開啟視窗、描繪圖形和使用周邊設備等目的,由於這些函數服務的對象是應用程序,所以稱之為Application Programming Interface,簡稱API 函數。

WIN32 API也就是MicrosoftWindows 32位平台的應用程序編程介面。凡是在 Windows工作環境底下執行的應用程序,都可以調用Windows API。

linux API

在linux中,用戶編程介面API遵循了UNIX中最流行的應用編程界面標准---POSIX標准。POSIX標準是由IEEE和ISO/IEC共同開發的標准系統。

該標准基於當時現有的UNIX實踐和經驗,描述了操作系統的系統調用編程介面API,用於保證應用程序可以在源程序一級上在多種操作系統上移植運行。這些系統調用編程介面主要是通過C庫(LIBC)來實現的。

Ⅸ api的參數一般是32位的那如果傳遞一個word類型的呢

這COM技術的一種,可以做成GUI EXE, 象Word, Excel;也可以做成Service.
從CoRegisterClassObject(...)看起吧, COM是Windows的一大支柱,但弄明白了它, 你也就可以當老大了.

Ⅹ 如何用WIN32API收集參數

WinMain的第三個參數PTSTR pszCmdLine就是啟動程序時用戶輸入的參數的命令行,但是用空格將各個字元串分開的任務交由用戶自己完成。另外調用API函數GetCommandLine()也可以獲取命令行字元串。