实现效果:
设置远程视频服务器的OSD叠加(内容,显示位置等)。SDK的函数说明:BOOL VSNET_ClientSetChanOSD(char *m_sername,char *m_url,char m_ch,char *m_username,char *m_password,CHANNOSD *m_pSetPara,WORD wserport = 3000)
说明:设置OSD参数;
参数说明:
m_sername:服务器名称;
m_url:服务器地址;
m_ch:通道号;
m_username:用户名;
m_password:密码;
m_pSetPara:指向CHANNOSD的指针;
wserport :服务器端口号;
返回值:成功返回TRUE,失败返回FALSE;CHANNOSD结构:
typedef struct
{
TIMEOSD m_time;
TITALOSD m_tital[4];
BITSINFOOSD m_bits;
}CHANNOSD;
说明:
m_time:时间显示;
m_tital:4个字符显示;
m_bits:码率信息显示;TIMEOSD结构:
typedef struct
{
int nFormat; //ETI_TIME_FORMAT_1,ETI_TIME_FORMAT_2,ETI_TIME_FORMAT_3
unsigned short x,y; //显示的位置,x为4的倍数
}TIMEOSD;
说明:
nFormat:
0:关闭,不显示;
1: 显示,格式为:2003-09-12 15:23:33
2:显示,格式为:2003-09-12 星期五 15:23:33
3:显示,格式为:09-12-2003 15:23:33
4:显示,格式为:09-12-2003 星期五 15:23:33
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关,x必须为;BITSINFOOSD结构:
typedef struct
{
int bShow;
unsigned short x,y;
}BITSINFOOSD;
说明:
bShow:显示开关,1:显示,0:关闭;
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;TITALOSD结构:
typedef struct
{
char lpString[32];
unsigned short x,y;
}TITALOSD;
说明:
lpString:显示的字符,为空不显示;
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;我的代码:函数声明:模块'设置OSD参数
Public Declare Function VSNET_ClientSetChanOSD Lib "NetClient.dll" _
(ByVal m_sername As String, _
ByVal m_url As String, _
ByVal m_ch As Byte, _
ByVal m_username As String, _
ByVal m_password As String, _
ByRef m_pSetPara As CHANNOSD, _
ByVal wserport As Long) As Boolean
'通用全局变量
Public ServerName As String '服务器名称
Public nCHanel As Integer '通道
Public URL As String 'IP
Public Username As String '用户名
Public Password As String '密码
Public wserport As Long '端口
'BITSINFOOSD 结构:
Type BITSINFOOSD
bShow As Long
x As Integer
y As Integer
End Type
'说明:
'bShow:显示开关,1:显示,0:关闭;
'x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;'TITALOSD 结构:
Type TITALOSD
lpString As String '问题出现在这里,由于这个始终有问题,会影响其他参数。
x As Integer
y As Integer
End Type
'说明:
'lpString:显示的字符,为空不显示;
'x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;'TIMEOSD 结构
Type TIMEOSD
nFormat As Long '; //ETI_TIME_FORMAT_1,ETI_TIME_FORMAT_2,ETI_TIME_FORMAT_3
x As Integer '; //显示的位置,x为4的倍数
y As Integer
End Type'说明:
'nFormat:
'0:关闭,不显示;
'1: 显示,格式为:2003-09-12 15:23:33
'2:显示,格式为:2003-09-12 星期五 15:23:33
'3:显示,格式为:09-12-2003 15:23:33
'4:显示,格式为:09-12-2003 星期五 15:23:33
'x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关,x必须为;
'OSD--CHANNOSD结构:
Type CHANNOSD
m_time As TIMEOSD
m_tital As TITALOSD
m_bits As BITSINFOOSD
End Type'程序调用:
Private Sub CmdWriteOSD_Click()
Dim ret As Boolean
Dim pCHOSD As CHANNOSD
Dim pBIT As BITSINFOOSD
Dim pTitle As TITALOSD
Dim pTime As TIMEOSD
Dim chn As Byte
Dim txtP As String
'Dim i As Long
'Dim tmp As String
Dim txtTEMP As String
txtP = "\0"
With pTime
.nFormat = CombTime.ListIndex
.x = xTime.Text
.y = yTime.Text
End With
txtTEMP = Trim(txtTitle.Text)
'txtTEMP = StrConv(txtTEMP, vbUnicode) & txtP '这个txt是想为字符串添加一个结束符,呵呵,真不知道怎么做。
With pTitle
.lpString = txtTEMP
.x = xTitle.Text
.y = yTitle.Text
End With
With pBIT
.bShow = CHECKBit.Value
.x = xBIT.Text
.y = yBIT.Text
End With
nCHanel = Trim(txtCHanel.Text)
chn = nCHanel
With pCHOSD
.m_time = pTime
.m_tital = pTitle
.m_bits = pBIT
End With
ret = VSNET_ClientSetChanOSD(ServerName, URL, chn, Username, Password, pCHOSD, wserport)
If ret Then
'MsgBox "²Ù×÷³É¹¦"
bSDKOpen = True
Timer1.Interval = 100
Timer1.Enabled = True
Else
MsgBox "²Ù×÷ʧ°Ü"
bSDKOpen = False
End If
End Sub
设置远程视频服务器的OSD叠加(内容,显示位置等)。SDK的函数说明:BOOL VSNET_ClientSetChanOSD(char *m_sername,char *m_url,char m_ch,char *m_username,char *m_password,CHANNOSD *m_pSetPara,WORD wserport = 3000)
说明:设置OSD参数;
参数说明:
m_sername:服务器名称;
m_url:服务器地址;
m_ch:通道号;
m_username:用户名;
m_password:密码;
m_pSetPara:指向CHANNOSD的指针;
wserport :服务器端口号;
返回值:成功返回TRUE,失败返回FALSE;CHANNOSD结构:
typedef struct
{
TIMEOSD m_time;
TITALOSD m_tital[4];
BITSINFOOSD m_bits;
}CHANNOSD;
说明:
m_time:时间显示;
m_tital:4个字符显示;
m_bits:码率信息显示;TIMEOSD结构:
typedef struct
{
int nFormat; //ETI_TIME_FORMAT_1,ETI_TIME_FORMAT_2,ETI_TIME_FORMAT_3
unsigned short x,y; //显示的位置,x为4的倍数
}TIMEOSD;
说明:
nFormat:
0:关闭,不显示;
1: 显示,格式为:2003-09-12 15:23:33
2:显示,格式为:2003-09-12 星期五 15:23:33
3:显示,格式为:09-12-2003 15:23:33
4:显示,格式为:09-12-2003 星期五 15:23:33
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关,x必须为;BITSINFOOSD结构:
typedef struct
{
int bShow;
unsigned short x,y;
}BITSINFOOSD;
说明:
bShow:显示开关,1:显示,0:关闭;
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;TITALOSD结构:
typedef struct
{
char lpString[32];
unsigned short x,y;
}TITALOSD;
说明:
lpString:显示的字符,为空不显示;
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;我的代码:函数声明:模块'设置OSD参数
Public Declare Function VSNET_ClientSetChanOSD Lib "NetClient.dll" _
(ByVal m_sername As String, _
ByVal m_url As String, _
ByVal m_ch As Byte, _
ByVal m_username As String, _
ByVal m_password As String, _
ByRef m_pSetPara As CHANNOSD, _
ByVal wserport As Long) As Boolean
'通用全局变量
Public ServerName As String '服务器名称
Public nCHanel As Integer '通道
Public URL As String 'IP
Public Username As String '用户名
Public Password As String '密码
Public wserport As Long '端口
'BITSINFOOSD 结构:
Type BITSINFOOSD
bShow As Long
x As Integer
y As Integer
End Type
'说明:
'bShow:显示开关,1:显示,0:关闭;
'x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;'TITALOSD 结构:
Type TITALOSD
lpString As String '问题出现在这里,由于这个始终有问题,会影响其他参数。
x As Integer
y As Integer
End Type
'说明:
'lpString:显示的字符,为空不显示;
'x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;'TIMEOSD 结构
Type TIMEOSD
nFormat As Long '; //ETI_TIME_FORMAT_1,ETI_TIME_FORMAT_2,ETI_TIME_FORMAT_3
x As Integer '; //显示的位置,x为4的倍数
y As Integer
End Type'说明:
'nFormat:
'0:关闭,不显示;
'1: 显示,格式为:2003-09-12 15:23:33
'2:显示,格式为:2003-09-12 星期五 15:23:33
'3:显示,格式为:09-12-2003 15:23:33
'4:显示,格式为:09-12-2003 星期五 15:23:33
'x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关,x必须为;
'OSD--CHANNOSD结构:
Type CHANNOSD
m_time As TIMEOSD
m_tital As TITALOSD
m_bits As BITSINFOOSD
End Type'程序调用:
Private Sub CmdWriteOSD_Click()
Dim ret As Boolean
Dim pCHOSD As CHANNOSD
Dim pBIT As BITSINFOOSD
Dim pTitle As TITALOSD
Dim pTime As TIMEOSD
Dim chn As Byte
Dim txtP As String
'Dim i As Long
'Dim tmp As String
Dim txtTEMP As String
txtP = "\0"
With pTime
.nFormat = CombTime.ListIndex
.x = xTime.Text
.y = yTime.Text
End With
txtTEMP = Trim(txtTitle.Text)
'txtTEMP = StrConv(txtTEMP, vbUnicode) & txtP '这个txt是想为字符串添加一个结束符,呵呵,真不知道怎么做。
With pTitle
.lpString = txtTEMP
.x = xTitle.Text
.y = yTitle.Text
End With
With pBIT
.bShow = CHECKBit.Value
.x = xBIT.Text
.y = yBIT.Text
End With
nCHanel = Trim(txtCHanel.Text)
chn = nCHanel
With pCHOSD
.m_time = pTime
.m_tital = pTitle
.m_bits = pBIT
End With
ret = VSNET_ClientSetChanOSD(ServerName, URL, chn, Username, Password, pCHOSD, wserport)
If ret Then
'MsgBox "²Ù×÷³É¹¦"
bSDKOpen = True
Timer1.Interval = 100
Timer1.Enabled = True
Else
MsgBox "²Ù×÷ʧ°Ü"
bSDKOpen = False
End If
End Sub
{
char lpString[32];
unsigned short x,y;
}TITALOSD;在VB中这样转换我觉得比较好:
Type TITALOSD
lpString (1 To 32) As Byte
x As Integer
y As Integer
End Type
With pTime
.nFormat = CombTime.ListIndex
.x = xTime.Text
.y = yTime.Text
End With好像里面的类型不配置
(ByVal m_sername As String, _
ByVal m_url As String, _
ByVal m_ch As Byte, _
ByVal m_username As String, _
ByVal m_password As String, _
ByRef m_pSetPara As CHANNOSD, _
ByVal wserport As Integer) As Long...'TITALOSD 结构:
Type TITALOSD
lpString(0 to 31) As String
x As Integer
y As Integer
End Type...'OSD--CHANNOSD结构:
Type CHANNOSD
m_time As TIMEOSD
m_tital(0 to 3) As TITALOSD
m_bits As BITSINFOOSD
End Type调用部分没多看.....
typedef struct
{
char lpString[32];
unsigned short x,y;
}TITALOSD;
说明:
lpString:显示的字符,为空不显示;
x,y:显示的位置,该位置的范围为0-704,0-576,与图像的分辨率无关;现在需要我用VB写这样的结构,然后传参数,实际上主要是两种不同语言的结构描述方法问题,我是这样做的:声明部分:
Type TITALOSD
lpString(0 To 31) As String
x As Integer
y As Integer
End Type调用部分:
Dim i, j As Long
Dim txtAR(0 To 31) As String
For i = 0 To Len(Trim(txtTitle.Text)) - 1
txtAR(i) = Mid(Trim(txtTitle.Text), i + 1, 1)
Next i
With pTitle
For j = 0 To i
.lpString(i) = txtAR(j) ' StrConv(txtAR(j), vbFromUnicode)
Next j
.x = xTitle.Text
.y = yTitle.Text
End With
lpString As String
x As Integer
y As Integer
End Type'调用部分:Private Sub Command1_Click() Dim i, j As Long
Dim pTitle As TITALOSD Dim txtAR(0 To 31) As String
For i = 0 To Len(Trim(txtTitle.Text)) - 1
txtAR(i) = Mid(Trim(txtTitle.Text), i + 1, 1)
Next i
With pTitle
For j = 0 To i
.lpString = .lpString & txtAR(j) ' StrConv(txtAR(j), vbFromUnicode)
Next j
'.x = xTitle.Text
'.y = yTitle.Text
End With MsgBox ("Result is : " & pTitle.lpString)
End Sub
lpString(0 To 31) As Byte
x As Integer
y As Integer
End Type
Dim pTitle As TITALOSD
With pTitle
.lpString = StrConv(Trim(txtTitle.Text),vbFromUnicode)
'.x = xTitle.Text
'.y = yTitle.Text
End With MsgBox ("Result is : " & pTitle.lpString)
End Sub
{
char lpString[32];
unsigned short x,y;
}TITALOSD;
中的第三行,char lpSting[32]是一个字符数组。相当于VB中的定长字符串。Type TITALOSD
lpString(0 To 31) As Byte'楼主的声明则是声明了一个32个元素的字符数组...
x As Integer
y As Integer
End Type我认为应该改为lpString as string*32
在下是新手,可能不对,呵呵,望楼主海函...
lpString 赋值后请在末尾添加 Chr(0)
因为 C 的字符串都是以 Chr(0) 结束的,VB的字符串没有,所以有误