2011-09-28 116 views
2

當我調用該函數RTMP_SetupURL從德爾福的網址是不是在記錄RTMP更新的地圖,我tanslated DLL函數那樣:LIBRTMP德爾福:該DLL

int RTMP_SetupURL(RTMP *r, char *url); 

function RTMP_SetupURL(var r:RTMP; url:PAnsichar):integer; 

和AVAL聲明如下記錄即:

AVal = record 
av_val: PansiChar; 
av_len: integer; 
end; 

之前設置的URL有一個初始化的問題,我的記錄(RTMP)不正確初始化,下面我的紀錄:

PChar = PAnsiChar; 
uint32_t = LongWord; 
uint8_t = Byte; 
int8_t = char; 
int32_t = LongInt; 
unsigned_int = LongWord; 
unsigned_short = Word; 
int16_t = smallint; 
cchar = Char; 
cint = LongInt; 

RTMP = record 
m_inChunkSize : cint; 
m_outChunkSize : cint; 
m_nBWCheckCounter : cint; 
m_nBytesIn : cint; 
m_nBytesInSent : cint; 
m_nBufferMS : cint; 
m_stream_id : cint; 
m_mediaChannel : cint; 
m_mediaStamp : uint32_t; 
m_pauseStamp : uint32_t; 
m_pausing : cint; 
m_nServerBW : cint; 
m_nClientBW : cint; 
m_nClientBW2 : uint8_t; 
m_bPlaying : uint8_t; 
m_bSendEncoding : uint8_t; 
m_bSendCounter : uint8_t; 
m_numInvokes : cint; 
m_numCalls : cint; 
m_methodCalls : PRTMP_METHOD; 
m_vecChannelsIn : array[0..(RTMP_CHANNELS)-1] of PRTMPPacket; 
m_vecChannelsOut : array[0..(RTMP_CHANNELS)-1] of PRTMPPacket; 
m_channelTimestamp : array[0..(RTMP_CHANNELS)-1] of cint; 
m_fAudioCodecs : double; 
m_fVideoCodecs : double; 
m_fEncoding : double; 
m_fDuration : double; 
m_msgCounter : cint; 
m_polling : cint; 
m_resplen : cint; 
m_unackd : cint; 
m_clientID : AVal; 
m_read : RTMP_READ; 
m_write : RTMPPacket; 
m_sb : RTMPSockBuf; 
Link : RTMP_LNK; 
end; 
PRTMP = ^RTMP; 

然後我打電話:

var MY_RTMP: RTMP; 
MY_RTMP := RTMP_Alloc; 
RTMP_Init(MY_RTMP); 

所有的記錄被初始化除外初始化URL時使用「鏈接」的紀錄。 我想這個記錄沒有正確申報

+0

不,「PAnsichar」是正確的。這就是你需要與'char *'匹配的東西。怎麼樣調用約定。你的Delphi版本應該使用'cdecl'嗎?兩種語言的RTMP定義是什麼? –

回答

2

我會試試這個。 Here是我用作基地的來源。

function RTMP_SetupURL(var R: RTMP; Url: PAnsiChar): Integer; cdecl; 
    external 'librtmp.dll' name 'RTMP_SetupURL';