如何用delphi调用一个vc的动态链接库? |
尚未結案
|
ffprince
初階會員 發表:66 回覆:62 積分:25 註冊:2003-08-16 發送簡訊給我 |
小弟用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 發送簡訊給我 |
|
ffprince
初階會員 發表:66 回覆:62 積分:25 註冊:2003-08-16 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
ffprince
初階會員 發表:66 回覆:62 積分:25 註冊:2003-08-16 發送簡訊給我 |
引言:情况是这样的:word、integer、smallint……试了很多种,只有integer虽然运行会报错,说什么00000200地址什么的(不好意思,是别人叫我问的,所以不太清楚),但可以正确实现功能。其他的(如word、smallint),都不能正确译码,他们的报错信息是其他的8位16进制数……引言: 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 |
ralph
初階會員 發表:41 回覆:82 積分:29 註冊:2003-02-04 發送簡訊給我 |
|
ffprince
初階會員 發表:66 回覆:62 積分:25 註冊:2003-08-16 發送簡訊給我 |
引言: 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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |