紧急提问:传参数到DLL的问题,急,没分了也得给100分,解决就结帐哈。
tmran 2005-05-13 05:49:14 实现效果:
设置远程视频服务器的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