通常我會這樣寫:
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...