寫dll應該注意的問題

2021-05-04 23:18:31 字數 3028 閱讀 2447

delphi和c++資料型別對照表

delphi        字長/值域                                c++

shortint    8位有符號整型                        signed char

smallint    16位有符號整型                        short

longint        32位有符號整型                        int

byte        8位無符號整型                        unsigned char

word        16位無符號整型                        unsigned short

integer        32位有符號整型                        int

cardinal    32位無符號整型                        unsigned int

boolean        真/假                                bool

bytebool    真/假 或 8位無符號整型                unsigned char

wordbool    真/假 或 16位無符號整型                unsigned short

longbool    真/假 或 32位無符號整型                bool (winapi)

ansichar    8位無符號字元                        char

widechar    寬字編碼字元                        wchar_t

char        8位無符號字元                        char

ansistring    delphi的字串類                    ansistring 類

string[n]    老式的delphi字串, n = 1..255位元組    smallstring模板類

shortstring    老式的delphi字串, 255位元組            smallstring<255>

string        delphi的ansistring類                ansistring

single        32位浮點數                            float

double        64位浮點數                            double

extended    80位浮點數                            long double

real        32位浮點數                            double

pointer        32無型別指標                        void *

pchar        32位字元型指標                        unsigned char *

pansichar    32位ansi型字元指標                    unsigned char *

comp        64位浮點數                            comp 類

olevariant    ole可變型別值                        olevariant 類

對使用delphi製作dll復用檔案的建議

在公司裡有一些需要製作dll的場合,因為熟悉、方便和簡易,大多數使用delphi來製作。現在就這個主題提出一些個人建議。

盡量使用標準dll介面。指的是傳遞的引數型別及函式返回型別不能是delphi特有的,比如string(ansistring),以及動態陣列和含有這些型別成員的復合型別(如記錄),也不能是包含有這些型別成員資料成員的物件型別,以避免可能的錯誤。如果使用了string型別或動態陣列型別,且呼叫方不是delphi程式,則基本上會報錯。如果呼叫方是delphi但呼叫方或被呼叫方沒有在工程檔案的第一包含單元不是sharemem,也可能會出錯。

如果呼叫方是delphi應用程式,則可能可以使用不包含禁止型別(string, 動態陣列)資料成員的物件作為引數或返回值,但也應盡量避免。

如果呼叫方與被呼叫方都是delphi程式,而且要使用string或動態陣列作引數,則雙方工程檔案的第一包含單元必須是sharemem。(c++builder程式的情況可能與此相同,不過沒有測試過。)

如果呼叫方不是delphi程式,則string、動態陣列、包含string或動態陣列的復合資料型別及類例項,都不能作為引數及返回值。

因此,為了提高dll的復用範圍,避免可能存在的錯誤,應當使用標準win32 api標準引數型別,以前使用string的變數,可以使用pchar(s)轉換。動態陣列則轉換為指標型別(@array[0]),並加上陣列的長度。

如果因為呼叫方與被呼叫方都是delphi程式,為了編寫方便,不想進行上述轉換,則推薦使用執行時包的形式。執行時包可以保證動態分配資料的正確釋放。這樣因為其副檔名(.bpl),顯出該檔案僅限於delphi/c++builder使用(不象dll)。

其次,盡量避免使用overload的函式/過程作輸出,如果同一操作有多個方式,則可以讓函式/過程名有少許差別,類似於delphi中的format***x、create***x等函式及方法,如createbydefaultfile, createdefault。

最後,作為dll的提供者,應當提供直接程式設計的介面檔案,如delphi中的.pas或.dcu(最好是.pas,因為可以有注釋)、c及c++中的.h和.lib。而不是讓使用者們自己建立。如果非要有overload的函式/過程,這一點顯得特別重要。另外,作為delphi應用,提供的.pas檔案可以是提前連線的(使用external指定dll中的輸出函式),也可以是後期連線的(使用loadlibrary、getprocaddress),dll提供者提供程式設計介面檔案,既顯得正式(或hiqos),又有保障。

寫求職信應該注意的問題

由於求職信 即個人簡歷說明信或附函 一般都放在個人簡歷的前面,因而用人單位對你的第一印象總是從你的求職信中而獲得的,所以,每個求職者都必須認真寫好求職信。寫求職信時不可輕視一些細緻入微的小節,因為在雇主的眼裡,注重小節的人在工作崗位上也會謹慎行事。乙個人為人做事是否謹慎可以從一封求職信中看出端倪來。...

寫指令碼的時候應該注意的幾個問題

1.任務出現問題時需要 返回失敗碼。例如,需要匯入的資料檔案不存在,即上游資料出了問題,這個時候需要返回錯誤碼,方便處理,通知到相關開發人員等 2.批量匯入任務時,需要考慮到某些任務可能失敗的風險,如果這些可以失敗的任務是允許的,那麼,需要做處理,以免失敗中斷程式,影響其他任務 3.指令碼應該是可以...

寫頁面注意的問題

1.先觀察 那些結構是一樣的,一樣的統一用class細節 決定一切 千萬注意 id用法,寧願多建立類,css,不要看2個塊內容外表差不多就複製 貼上完事,要考慮內部內容是否一樣js控制的時候 會出現什麼情況 等等 2.見表單就label 繫結 3.標籤語義化 很重要 4.整個頁面在寫之前首先應該先把...