<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                本例用delphi 7 編寫 編寫DLL就要遵守DLL規則。DLL規則,可以簡單地理解為 windows 規則。(以后簡稱 win 規則) 對于DLL函數的String參數,要特別設計。 先來看GetWindowText這個Win函數的調用方法 ~~~ procedure TForm1.Button1Click(Sender: TObject); // 本例為 D7, Char 默認是 AnsiChar var Buff: array[0..255] of char; //定義一塊內存,用于存放Window的標題。 sWndText: string; begin ZeroMemory(@Buff, 256); // Buff 清零,避免不必要的麻煩。 GetWindowText(self.Handle, Buff, 256); // 告訴函數,我提供了 256 個字節的 buff 供其使用。 sWndText := Buff; // 此句等價于 sWndtext:=String(PChar(@buff)); DispMsg(sWndText); // 輸出結果是 Form1 end; ~~~ 為了調用此函數,我們先定義了一塊內存供函數使用,此為Win規則的推薦寫法。 為什么要這樣設計?這涉及到內存分配與釋放的問題。 由調用者提供BUFF與長度,在DLL函數中使用此塊內存,并由長度來控制邊界, 讓內存的歸屬問題變得簡單清晰。 好,下面我們來設計一個DLL函數: 菜單: File-->New-->Other... 切換到 New 標簽,選擇 DLL Wizard 再點擊 OK ,即可新建一個DLL工程。 ~~~ library TestDLL; uses SysUtils, Classes; {$R *.res} // 本函數將Str反轉。如: abc 變成 cba procedure ReverseStr(AInStr, AOutStr: PChar; ACount: integer); stdcall; var i: integer; begin inc(AInStr, ACount - 1); for i := 0 to ACount - 1 do begin AOutStr^ := AInStr^; Dec(AInStr); inc(AOutStr); end; end; exports // 輸出函數申明 ReverseStr; begin end. ~~~ 寫好代碼,編譯后就可以得到 TestDLL.dll 再編寫一個調用此DLL函數的EXE工程。 ~~~ // 雖然 delphi 對函數名大小寫不敏感 // 但是:在申明DLL函數的時候,大小寫一定要與DLL中的定義相同。 // 即此處 ReverseStr 不可寫成 reversestr procedure ReverseStr(AInStr, AOutStr: PChar; ACount: integer); stdcall; external 'TestDLL.dll'; // 申明DLL procedure TForm1.Button2Click(Sender: TObject); var sInStr: string; sOutStr: string; n: integer; begin sInStr := 'abcdefghijklmno'; n := Length(sInStr); SetLength(sOutStr, n); // 給 sOutStr 分配空間 ReverseStr(PChar(sInStr), PChar(sOutStr), n); DispMsg(sOutStr); // 輸出結果:onmlkjihgfedcba end; ~~~ [本例源碼下載](https://www.jianguoyun.com/p/DbrONaMQxMf4BRjK1zs)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看