-
winuserapi bool winapi setwindowtexta(hwnd hwnd, lpcstr lpstring);
它是乙個 API
API與普通函式相同,但呼叫方式不同,API採用StaCall呼叫方式。
實際上,上面的bool winapi setwindowtexta reed winapi只是一種編寫stdcall的方式。
定義 WinAPI stdcall 與定義黑色 0 相同。
WinUserAPI 只不過是匯出空間的名稱。
define winapi _stdcall
#ifdef winuserapi_exports
#define winuserapi _declspec(dllexport)
#else#define winuserapi_declspec(dllimport)
#endif
bool winapi setwindowtexta(hwnd hwnd, lpcstr lpstring);
-
使用 VB 製作的 DLL 是 ActiveX DLL,而不是真正的 DLL。 只有用C等製作的DLL才是真正意義上的DLL,並具有輸出API函式的功能。
-
這通常很難。 沒有特別好的方法來獲取 dll 的呼叫介面。
一般方法是這樣的:
1.查詢 dll 的匯出函式表,以獲取 dll 匯出的函式數。 這可以通過 PE Explorer 等工具完成
2.設計自己的載入程式,載入 dll,然後依次呼叫找到的所有匯出函式。 方法:
使用 loadlibrary 載入 dll
使用 getprocaddress 通過函式名稱取出函式位址,然後假設函式的原型是 void exfun(void); 來稱呼它。
3.在偵錯程式中設定斷點以呼叫匯出函式,f11 將跟進。
4.這個時候,就比較麻煩了。 首先,檢查函式末尾的 ret 語句是否有引數。
如果 ret 有引數,則函式的型別可能是 stdcall,ret 引數通常是匯出的函式引數的位元組數。 如果 ret 沒有引數,則該函式可能沒有引數,或者該函式的型別可能是 cdecl。 此時,無法確定是哪種情況,您需要進一步閱讀有關函式接收器編碼的資訊。
5.檢視整個函式的接收器編碼,看看是否有任何相似之處"ebp+x"例如 EBP+8、EBP+C 等,這些都是引數。 EBP+4 是返回位址。
如果函式的型別為 stdcall 或 cdecl,則 ebp+8 是函式的第乙個引數,ebp+c 是第二個引數。
從上面可以看出,如果函式的型別是 stdcall,那麼可能更容易找到函式原型。 但如果是 cdecl 型別,那就靠運氣了。 因為該函式可能有引數,但未使用。
即使函式是 stdcall,然後獲取了位元組數,步驟 5 中的搜尋方法也會找到可能的引數數。 一種可能性是函式傳遞了乙個結構,假設結構是 8 位元組,堆疊位址是 ebp+c,那麼你可能找不到 EBP+10 的參考點,所以無法確定函式是使用 8 位元組結構還是不使用引數,這使得無法恢復函式原型。
說了這麼多也挺讓人摸不著頭腦的,其實我想表達的是“咱們找個頭檔案。。。
-
您可以使用反彙編來了解介面和介面功能的引數。 工具可以使用windsw。
-
dllimport("叫。 dll",引數]。
private static extern long getdictrecord(parameter); 介面功能。
-
API 是乙個應用程式程式設計介面。 它是一組可用於操作元件、應用程式或作業系統的函式。 通常,API 由乙個或多個提供某種特殊功能的 DLL 組成。
DLL 是乙個檔案,其中包含可在 Microsoft Windows 下執行的任何應用程式呼叫的函式。 在執行時,DLL 中的函式動態鏈結到呼叫它的應用程式。 無論有多少應用程式呼叫 DLL 中的函式,磁碟上只有乙個檔案包含該函式,並且只有在將 DLL 呼叫到記憶體中時才會建立該 DLL。
您可能最常聽到的 API 是 Windows API,其中包括構成 Windows 作業系統的各種 DLL。 每個 Windows 應用程式都直接或間接地與 Windows API 互動。 Windows API 保證在 Windows 下執行的所有應用程式的行為一致。
注意 隨著 Windows 作業系統的發展,已經發布了使用 Win16、Windows NT、Windows 95 和 Windows 98 平台使用 Microsoft Win32 API 的多個 Windows 版本。
除了 Windows API 之外,還發布了許多其他 API。 例如,郵件應用程式程式設計介面 (MAPI) 是一組可用於編寫電子郵件應用程式的 DLL。
API 傳統上是為開發 Windows 應用程式的 C 和 C++ 程式設計師編寫的,但其他程式語言(包括 VBA)也可以呼叫 DLL 中的函式。 由於大多數 DLL 主要是為 C 和 C++ 程式設計師編寫和組織的,因此呼叫 DLL 函式的方法與呼叫 VBA 函式不同。 使用 API 時,請務必了解如何將引數傳遞給 DLL 函式。
警告:呼叫 Windows API 和其他 DLL 函式可能會對應用程式產生不利影響。 當您直接從自己的 ** 呼叫 DLL 函式時,您將繞過 VBA 通常提供的一些安全機制。 如果在定義或呼叫 DLL 函式時出現錯誤(這對所有程式設計師來說都是不可避免的),則可能會導致應用程式中出現應用程式錯誤(也稱為一般保護錯誤或 gpf)。
最佳解決方案是在執行專案之前儲存專案,並確保了解 DLL 函式呼叫的工作原理。
API 是系統提供的函式,與語言無關,可以用 C、C++ 或其他語言編寫。
我們對努力的誤解:當我們談論努力的話題時,它往往與鼓舞人心、超越和忍受痛苦的毅力等概念聯絡在一起,因為這個詞的詞性。 誠然,努力與這些概念有關,並且有許多努力的故事非常感人。 >>>More
幼兒園是孩子成長的第一步,也是孩子和父母長期分離的情況。 那麼,家長應該怎麼做才能等到孩子順利上幼兒園呢? >>>More