调用C写的DLL问题
'typedef struct _state_now{
' unsigned char ifTel:1;
' unsigned char ifRing:1;
' unsigned char ifError:1;
' unsigned char ifDtmf:1;
' unsigned char dtmf:4;
' unsigned char hd;
'} STATE_NOW;
'功能:查询状态
'入口:1 port, 端口号(0-7 对应 USB口的64-71),state 状态
'出口:1 成功;0 失败。
'int WINAPI GetKHTState(int port, STATE_NOW * state)
别人用VB写的
Declare Sub GetKHTState Lib "mtudll.DLL " (ByVal port As Long, ByRef state As Integer)
我用DELPHI来调用的代码如下
type
STATE_NOW=packed record
ifTel:char;
ifRing:char;
ifError:char;
ifDtmf:char;
dtmf:array[1..4] of char;
hd:pchar;
end;
PSTATE_NOW=^STATE_NOW;
function GetKHTState(port:integer; state:PSTATE_NOW):integer;stdcall; external 'mtudll.DLL ' name 'GetKHTState ';
Var
st:pSTATE_NOW;
begin
if GetKHTState(64,st)=1 then //这里执行时为真,说明返回成功
edit1.Text :=st.ifTel //可是没有得到任何数据,是空的
我错在那里,应该什么办?
很急,帮帮忙呀?
[解决办法]
Var
st:pSTATE_NOW;
begin
new( st );
if GetKHTState(64,st)=1 then //这里执行时为真,说明返回成功
edit1.Text :=st.ifTel //可是没有得到任何数据,是空的
dispose( st );
[解决办法]
'typedef struct _state_now{
' unsigned char ifTel:1;
' unsigned char ifRing:1;
' unsigned char ifError:1;
' unsigned char ifDtmf:1;
' unsigned char dtmf:4;
' unsigned char hd;
'} STATE_NOW;
type
STATE_NOW=packed record
ifTel:char;
ifRing:char;
ifError:char;
ifDtmf:char;
dtmf:array[1..4] of char;
hd:char; //hd:pchar;改一下这里
end;
[解决办法]
delphi中是没有C/C++的位字段的(VB同理,所以它是用integer)
由于在C中PSTATE_NOW为指针,所以delphi中要这样定义
function GetKHTState(port:integer; var state:word):integer;stdcall; external 'mtudll.DLL ' name 'GetKHTState ';
然后,将state分别用and和shr来得到各个状态的值
var
state:word;
i:integer;
ifTel,ifRing,ifError,ifDtmf,dtmf,hd:integer;
begin
i:=GetKHTState(1,state);
Edit1.Text:=inttostr(i);
ifTel:=state and 1;
ifRing:=(state shr 1) and 1;
ifError:=(state shr 2) and 1;
ifDtmf:=(state shr 3) and 1;
dtmf:=(state shr 4) and $f;
hd:=(state shr 8) and $ff;