請問如何呼叫DLL之函數 |
尚未結案
|
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
|
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
uses windows; function Awe(dwBk: DWORD; pbBuff: Pointer; var dwLg: DWORD): DWORD; stdcall; external DLL name 'Awe';第三個參數宣告成 var, 表示 call by reference.. 如果第三個參數可有可無 (通常會寫,可傳 0 or NULL) 則可改成 在 Delphi, 就放 0 or nil function Awe(dwBk: DWORD; pbBuff: Pointer; dwLg: Pointer): DWORD; stdcall; external DLL name 'Awe';使用方式 var buffer: array[0..255] of Byte; out: DWORD; begin Awe(123, @buffer[0], out); end;-- Regards, Skyer
------
-- Regards, Skyer |
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
謝謝,我試沒有錯誤但是為何讀出的buffer是空的
而在BCB中讀出卻是有值
謝謝
引言:uses windows; function Awe(dwBk: DWORD; pbBuff: Pointer; var dwLg: DWORD): DWORD; stdcall; external DLL name 'Awe';第三個參數宣告成 var, 表示 call by reference.. 如果第三個參數可有可無 (通常會寫,可傳 0 or NULL) 則可改成 在 Delphi, 就放 0 or nilfunction Awe(dwBk: DWORD; pbBuff: Pointer; dwLg: Pointer): DWORD; stdcall; external DLL name 'Awe';使用方式var buffer: array[0..255] of Byte; out: DWORD; begin Awe(123, @buffer[0], out); end;-- Regards, Skyer |
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
|
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
程式如下 var
dwBk: DWORD;
dwRBytes: DWORD;
szBuff: array[0..255] of byte;
str:string;
begin
dwBk := 1;
dwRBytes := 255;
if iAwe(dwBk, @szBuff, dwRBytes) = 0 then
begin
showmessage('失敗!');
end
else
begin
str := '';
for I := 0 to high(szBuff) - 1 do
begin
str := str + char(szBuff[I]);
end;
showmessage(str);
end; end;
引言: 不太清楚 可以把您 bcb 使用 Awe 這函數的那段程式碼發表上來嗎? 這樣我比較能為您翻譯.. 因為翻譯上有很多種選擇, 如果有 c 實際使用例子 才可以找出最好的選擇 -- Regards, Skyer |
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
引言: 程式如下試試這樣作吧... @szBuf = C 的 &szBuf @szBuf[0] = C 的 &szBuf[0] 是不一樣的.. 再來 PChar 轉 String 可直接 assign -- Regards, Skyer 發表人 - Skyer 於 2005/01/27 12:58:10 發表人 - Skyer 於 2005/01/27 12:59:38var dwBk: DWORD; dwRBytes: DWORD; szBuff: array[0..255] of byte; str:string; begin dwBk := 1; dwRBytes := 255; if iAwe(dwBk, @szBuff[0], dwRBytes) = 0 then begin showmessage('失敗!'); end else begin // 如果 szBuf 確定是個 c string (0 結尾) // 則可以直接 assign 給 delphi string, 不然請先在 szBuf 最後加上 0 str := PChar(@szBuff[0]); showmessage(str); end; end;
------
-- Regards, Skyer |
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
你好,我試了其值仍是空的,我不清楚szBuf 是否為 c string
// 如果 szBuf 確定是個 c string (0 結尾)
// 則可以直接 assign 給 delphi string, 不然請先在 szBuf 最後加上 0
且如何加上0 謝謝
引言:引言: 程式如下試試這樣作吧... @szBuf = C 的 &szBuf @szBuf[0] = C 的 &szBuf[0] 是不一樣的.. 再來 PChar 轉 String 可直接 assign -- Regards, Skyer 發表人 - Skyer 於 2005/01/27 12:58:10 發表人 - Skyer 於 2005/01/27 12:59:38var dwBk: DWORD; dwRBytes: DWORD; szBuff: array[0..255] of byte; str:string; begin dwBk := 1; dwRBytes := 255; if iAwe(dwBk, @szBuff[0], dwRBytes) = 0 then begin showmessage('失敗!'); end else begin // 如果 szBuf 確定是個 c string (0 結尾) // 則可以直接 assign 給 delphi string, 不然請先在 szBuf 最後加上 0 str := PChar(@szBuff[0]); showmessage(str); end; end; |
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
你好,我試了其值仍是空的,我不清楚szBuf 是否為 c string
// 如果 szBuf 確定是個 c string (0 結尾)
// 則可以直接 assign 給 delphi string, 不然請先在 szBuf 最後加上 0
且如何加上0 謝謝
引言:引言: 程式如下試試這樣作吧... @szBuf = C 的 &szBuf @szBuf[0] = C 的 &szBuf[0] 是不一樣的.. 再來 PChar 轉 String 可直接 assign -- Regards, Skyer 發表人 - Skyer 於 2005/01/27 12:58:10 發表人 - Skyer 於 2005/01/27 12:59:38var dwBk: DWORD; dwRBytes: DWORD; szBuff: array[0..255] of byte; str:string; begin dwBk := 1; dwRBytes := 255; if iAwe(dwBk, @szBuff[0], dwRBytes) = 0 then begin showmessage('失敗!'); end else begin // 如果 szBuf 確定是個 c string (0 結尾) // 則可以直接 assign 給 delphi string, 不然請先在 szBuf 最後加上 0 str := PChar(@szBuff[0]); showmessage(str); end; end; |
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
|
shing.net
中階會員 發表:207 回覆:124 積分:66 註冊:2002-03-16 發送簡訊給我 |
BCB程式如下:
char temp[20];
DWORD dwBck;
AnsiString sOput = "";
BYTE szBuff[256];
DWORD dwBytes = 256;
dwBk = 1;
if(Awe(dwBk, szBuff, dwBytes) == false)
ShowMessage("fail");
for(int i = 0; i < dwBytes; i++)
{
sprintf(temp, "x", szBuff[i]);
sOput = sOput + temp;
}
Edit1->Text = sOput.c_str();
謝謝
引言: 還是不行啊 那您可以把 BCB 的程式有用這這個函數發表上來嗎? 因為就使用方式上,Delphi 並沒有錯... 會不會是在調用 DLL function 時出錯了.. -- Regards, Skyer |
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
uses windows; function Awe(dwBk: DWORD; pbBuff: Pointer; var dwLg: DWORD): DWORD; stdcall; external DLL name 'Awe'; var dwBck: DWORD; sOput: string; szBuff: array[0..255] of Byte; dwBytes: DWORD; i: Integer; begin dwBck := 1; dwBytes := 256; if Awe(dwBk, @szBuff[0], dwBytes) = 0 then ShowMessage('Failed.') else begin for i:=0 to dwBytes-1 do begin sOput := sOput Format('%.2x', [szBuff[i]]); end; Edit1.Text := sOput; end; end;-- Regards, Skyer
------
-- Regards, Skyer |
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |