帮忙翻译一段C代码(50分)

  • 主题发起人 主题发起人 gselec
  • 开始时间 开始时间
G

gselec

Unregistered / Unconfirmed
GUEST, unregistred user!
//xWaveDevice=(DWORD) * ((DWORD *) ((LPSTR)vs + vs->dwStringOffset) ); //不知道怎样翻译成Delphi的




LineGetID和WaveOutOpen错误.

//获取线路设备ID,是C代码改造的:

xWaveDevice:=dWord( dWord( LPSTR(xVarString) + xVarString.dwStringOffset) );
.................

//查询是否可用
WaveOutOpen(0,xWaveDevice,WaveFormat,0,0,Wave_Format_Query); //格式查询
..........
此处返回错误代码:设备不能用. MMSYSERR_BADDEVICEID
我用的Modem是不能正常判断Connected消息的那种.

各位高手谁遇到这样的问题?怎么解决?
 
晕倒了~这里也没有人会!!看来得去Borland社了
 
我翻译了!
 
xWaveDevice = (DWORD)*( (DWORD *)((LPSTR)vs + vs->dwStringOffset));

(LPSTR)vs + vs->dwStringOffset
vs可能是结构指针,如果直接加的话,会变成vs指向另一个vs结构的指针。
(LPSTR)vs是将此指针转成LPSTR类型的,那么加上vs->dwStringOffset则是相当于:
Inc(Integer(vs), vs.dwStringOffset);
即vs的指针为: 1000,那代码过后就是: 1000+dwStringOffset

如果是Inc(vs, vs.dwStringOffset)则是:
1000 + SizeOf(vs) * dwStringOffset;

DWORD*是相当于:
PWORD(P)

自已写了。。。
 
LPSTR => PChar => PAnsiChar = ^Char;

var
P: PChar;
S: string;
begin
S := 'abc';
P := PChar(S);
ShowMessage(P + 1);
ShowMessage(IntToStr(PWORD(P + 1)^));
end;
 
来晚了,呵呵!
 
谢谢了,还有上边的LineGetID函数,我想取一个LineOpen的线路设备的ID,
后边的DeviceClass用‘tapi/line’,总是取到空值。用了“Wave/Out”能取到一个,放在
WaveOutOpen里边的DeviceID却总是返回“BadFormat”,换成“LineMapper”可以通过,但
播放声音从声卡出来了:
..........取设备ID
LineGetID(Line,0,Call,LINECALLSELECT_Call,xVarString,'wave/out');
//Result:=PHandle(LpStr(xVarString)[xVarString.dwStringOffset])^;
Try
GetMem(xValue,xVarString^.dwStringSize);
Move( pChar(xVarString)[xVarString^.dwStringOffset],xValue^,xVarString^.dwStringSize); //xVarString^.dwStringOffset
Result:=dWord(xValue^);
Finally
FreeMem(xValue);
FreeMem(xVarString);
End;
..............播放声音
nValue:=WaveOutOpen(@WaveOut,LineMapper,WaveFormat,Cardinal(@WaveOutProc),xInstance,CallBack_Function);
这里的LineMapper~!
 
后退
顶部