DLL函式寫法 讓我很受教育

2021-04-20 13:46:24 字數 1131 閱讀 8357

通常我會這樣寫:

function test(str,rvalue: pchar): integer; stdcall;

var s:string; 

begin

s:='this is test'+str;  

strpcopy(rvalue,s);

result:= length(s); 

end; 

今天看了csdn上叫僵哥的一番話,很受教育,如下:

function test(src: pchar;srclen: integer;buffer: pchar;var size: integer): boolean; stdcall; 

begin

result := false; 

//最好對指標類必須的引數做乙個檢查 

//assert(src <> nil); 

//buffer為null時,表示僅取資料大小填充size 

//當buffer不足時,通知size告知實際需求的內容大小,並設定lasterror為error_more_data 

//注意:在通常情況下,只有處理過程完成才會知道實際所須的空間大小,而在此前是無法預知的 

//如果僅只傳遞乙個大小回去,就要做完一遍,然後在取資料的時候還需要再做一遍,明顯存在設計上的缺陷 

//最好的辦法是考慮使用臨時儲存所需的資訊,以在處理完一遍之後能夠直接獲取資訊. 

//或者在呼叫環境支援**的情況下,增加乙個寫出**過程作為引數傳進來 

if (buffer = nil) or (size < srclen) then

begin

setlasterror(byte(buffer <> nil) * 234

(*error_more_data, need more buffer size*) ); 

size := srclen; 

exit; 

end; 

//正常處理 

move(src^, buffer^, srclen); 

size := srclen; 

result := true; 

end; 

不過還是有個疑問,move方法出來的字串最後多了乙個@不知道為什麼?慢慢消化吧

標準dll的寫法

有一些書是反反覆覆看過很多次,每次看都有點新體驗。例如 com本質論 晚上看了下,上面有些關於dll的論述,慚愧,才知道標準的dll 跨編譯器並保持二進位制布局一致 要怎麼寫,雖然之前寫了n個com。假定dll要匯出乙個icomstylehelloworld的類,例子 comstyledll.h c...

讓VB生成的DLL工程匯出函式

vb是方便的快速開發語言之一,但是vb和最近流行的python相比,有一致使的缺點,就是它為了盡可能方便程式設計師傻瓜式開發,而把自己封閉在一圈子裡了,遮蔽了很多特性,比如用vb建立com元件是超級簡單,可惜若要自己加點東西,實存太麻煩了,比如我要讓dll匯出我自己的函式,用vb預設就做不到。剛好這...

讓 DLL 解除安裝自身

今天的問題是 有沒有可能讓乙個 dll 自己解除安裝自己?這個問題可以分成兩個部分 解除安裝乙個 dll。解除安裝 dll 的 應該是放在 dll之中的。當然,如果不考慮後果的話,這個 並不難寫,如下 簡單說明一下 在 dllmain 初始化的時候儲存 dll 的例項控制代碼 即模組控制代碼 供 f...