誰知道如何宣告我製作的 dll 也可以有乙個輸出 api 函式

發布 健康 2024-05-05
6個回答
  1. 匿名使用者2024-01-28

    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);

  2. 匿名使用者2024-01-27

    使用 VB 製作的 DLL 是 ActiveX DLL,而不是真正的 DLL。 只有用C等製作的DLL才是真正意義上的DLL,並具有輸出API函式的功能。

  3. 匿名使用者2024-01-26

    這通常很難。 沒有特別好的方法來獲取 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 位元組結構還是不使用引數,這使得無法恢復函式原型。

    說了這麼多也挺讓人摸不著頭腦的,其實我想表達的是“咱們找個頭檔案。。。

  4. 匿名使用者2024-01-25

    您可以使用反彙編來了解介面和介面功能的引數。 工具可以使用windsw。

  5. 匿名使用者2024-01-24

    dllimport("叫。 dll",引數]。

    private static extern long getdictrecord(parameter); 介面功能。

  6. 匿名使用者2024-01-23

    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++ 或其他語言編寫。

相關回答
5個回答2024-05-05

我怎樣才能更快地獲得財富?

有40個財富值100多個財富其實是可以拿到的,喇叭做任務,但系統延遲杯可能要到明天才能拿到。 >>>More

13個回答2024-05-05

我們對努力的誤解:當我們談論努力的話題時,它往往與鼓舞人心、超越和忍受痛苦的毅力等概念聯絡在一起,因為這個詞的詞性。 誠然,努力與這些概念有關,並且有許多努力的故事非常感人。 >>>More

13個回答2024-05-05

我認為多吃脂肪和富含蛋白質的東西是使人發胖的最簡單方法。

14個回答2024-05-05

幼兒園是孩子成長的第一步,也是孩子和父母長期分離的情況。 那麼,家長應該怎麼做才能等到孩子順利上幼兒園呢? >>>More

8個回答2024-05-05

大約有三種方法可以做到這一點。 1.空間模組。 >>>More