線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:843
推到 Plurk!
推到 Facebook!

如何用delphi调用一个vc的动态链接库?

尚未結案
ffprince
初階會員


發表:66
回覆:62
積分:25
註冊:2003-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-04 01:52:29 IP:61.154.xxx.xxx 未訂閱
小弟用delphi调用一个vc的动态链接库,为什么输入$200,运行却报错为00000200?应该定义成什么整形的?integer、smallint都不行! 我的程式是这么写的: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; function ANT_SELECT(x,y:integer):integer; Stdcall; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function ANT_SELECT; external 'cdhm002.dll' name 'ANT_SELECT' ; procedure TForm1.Button1Click(Sender: TObject); var 1,y1:integer; begin x1:=$200; y1:=1; ANT_SELECT(x1,y1); end;
ralph
初階會員


發表:41
回覆:82
積分:29
註冊:2003-02-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-04 03:03:44 IP:66.171.xxx.xxx 未訂閱
Why you declare "x1: integer" and set "x1 :=$200" ???? If x1 is integer ,x1 will be 512 because x1 := $200. If you want "x1 = 200", you should set "x1 := 200". or x1: integer; <== x1 = 200 x2: string; x2 := '$' IntToStr(x1); <== x2 = $200
ffprince
初階會員


發表:66
回覆:62
積分:25
註冊:2003-08-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-04 10:03:30 IP:61.154.xxx.xxx 未訂閱
引言: Why you declare "x1: integer" and set "x1 :=$200" ???? If x1 is integer ,x1 will be 512 because x1 := $200. If you want "x1 = 200", you should set "x1 := 200". or x1: integer; <== x1 = 200 x2: string; x2 := '$' IntToStr(x1); <== x2 = $200
$200是16进制数,$200和512是一样的,我用x1 = 512,也不行……
bbtw
一般會員


發表:2
回覆:31
積分:16
註冊:2003-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-04 13:12:11 IP:61.71.xxx.xxx 未訂閱
引言: function ANT_SELECT(x,y:integer):integer; Stdcall;
這一行在轉換時有沒有錯? 有沒有 *.h的原始定義可以看? 會用$200 那就試著用WORD 另外C常用一個寫法,裡面的參數必須傳址運算,並用來放結果, 而function 的 return 傳回執行成功或失敗訊息, 發表人 - bbtw 於 2004/03/04 13:13:59 發表人 - bbtw 於 2004/03/04 13:17:41
ffprince
初階會員


發表:66
回覆:62
積分:25
註冊:2003-08-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-04 18:44:58 IP:218.5.xxx.xxx 未訂閱
引言:
引言: function ANT_SELECT(x,y:integer):integer; Stdcall;
這一行在轉換時有沒有錯? 有沒有 *.h的原始定義可以看? 會用$200 那就試著用WORD 另外C常用一個寫法,裡面的參數必須傳址運算,並用來放結果, 而function 的 return 傳回執行成功或失敗訊息, 發表人 - bbtw 於 2004/03/04 13:13:59 發表人 - bbtw 於 2004/03/04 13:17:41
情况是这样的:word、integer、smallint……试了很多种,只有integer虽然运行会报错,说什么00000200地址什么的(不好意思,是别人叫我问的,所以不太清楚),但可以正确实现功能。其他的(如word、smallint),都不能正确译码,他们的报错信息是其他的8位16进制数……
ralph
初階會員


發表:41
回覆:82
積分:29
註冊:2003-02-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-05 05:42:23 IP:66.171.xxx.xxx 未訂閱
I think you input is 512,not 200 because "512" for function is correct and "200" for function is wrong. What is your exact input? 200, " dollar sign" 200, or 512.
ffprince
初階會員


發表:66
回覆:62
積分:25
註冊:2003-08-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-05 09:12:10 IP:61.154.xxx.xxx 未訂閱
引言: I think you input is 512,not 200 because "512" for function is correct and "200" for function is wrong. What is your exact input? 200, " dollar sign" 200, or 512.
512(10进制)和$200(16进制)是相等的。使用integer运行都是报错说什么00000200地址什么的(不好意思,是别人叫我问的,所以不太清楚),但都可以正确实现功能!
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-05 11:49:00 IP:147.8.xxx.xxx 未訂閱
As bbtw pointed out earlier, perhaps your declaration is wrong. Try function ANT_SELECT([red]var[/]red] x,y:integer):integer; Stdcall; I think you should better post your C source (at least the header file) here. BTW, in Delphi32, integer are 32 bits. Make sure it agrees with your dll.
ffprince
初階會員


發表:66
回覆:62
積分:25
註冊:2003-08-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-07 12:56:44 IP:218.85.xxx.xxx 未訂閱
引言: As bbtw pointed out earlier, perhaps your declaration is wrong. Try function ANT_SELECT([red]var[/]red] x,y:integer):integer; Stdcall; I think you should better post your C source (at least the header file) here. BTW, in Delphi32, integer are 32 bits. Make sure it agrees with your dll.
It is just what I want to ask! My dll requests 16 bits, but integer in Delphi is 32 bits. What can I do?
ralph
初階會員


發表:41
回覆:82
積分:29
註冊:2003-02-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-08 05:13:36 IP:66.171.xxx.xxx 未訂閱
引言: It is just what I want to ask! My dll requests 16 bits, but integer in Delphi is 32 bits. What can I do?
smallint => signed 16-bit integer => signed 32-bit
系統時間:2024-07-03 2:35:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!