读书人

VB与VC中API中字符串类型的转换有关问

发布时间: 2012-01-18 00:23:26 作者: rapoo

VB与VC中API中字符串类型的转换问题
VC 中,关于字符串,我看是这样的表示方法

char *sDVRFileName 和 BYTE sSerialNumber[SERIALNO_LEN]

这个我搞不太清,理论上面一个是字符串,一个是数组,可是vc好象是直接传递的vb就不行了呀

举个例子
VC是这样的

NET_DVR_API BOOL __stdcall NET_DVR_GetPicture(LONG lUserID,char *sDVRFileName,char *sSavedFileName);

BYTE sSerialNumber[SERIALNO_LEN]; //序列号

char filenamedownload[256];
char nFileName[256];
NET_DVR_GetPicture(GetPic-> m_lServerID, GetPic-> filenamedownload, nFileName) //调用


vb中 nFileName是一个字符串,怎样调用 NET_DVR_GetPicture呢



[解决办法]
VB 是完全 COM 兼容的,所以它的 String 就是 BStr,具体可以看看 MSDN。
c 中的 char* 是一个指针,而且字符串值 ANSI 格式。

首先,在 VB 中将参数声明未指针值(Long)
declare ... NET_DVR_GetPicture(byval lUserID as long,byval sDVRFileName as long, byval sSavedFileName as long)

其次,将VB字符串转换为 ANSI 格式并传递指针
sFileName = strconv(sFileName, vbFromUnicode)
NET_DVR_GetPicture lUserID, strptr(sFileName), strptr(sSaveFileName)

[解决办法]
sFileName = StrConv(strFileInfo.sFileName, vbUnicode)
[解决办法]
sFileName(0 To 100) As Byte '//图片名

sFileName As String*101

[解决办法]
调用的时候要先初始化这个String
***.sFileName =space(101)

读书人网 >VB

热点推荐