在VB程序中调用VC++编写的DLL,其中有的函数参数涉及到指针,而VB不支持指针类型,各相关的书籍中只讲到可按引用(或者说按地址传递)的方式声明,但具体到调用该函数时,要获得这个地址将如何进行?
比如:VC++编写的DLL中有如此函数
BOOL Hik_PlayM4_InputData(Long nPort,PBYTE pBuf,DWORD nSize);
说明:这是一个视频采集卡的SDK软件包中输入从卡上得到的数据流指定大小的数据缓冲区中。
其中:nPort是通道号
pBuf是缓冲区地址
nSize是缓冲区大小
请问:pBuf这个缓冲区地址在VB中如何来获得?
比如:VC++编写的DLL中有如此函数
BOOL Hik_PlayM4_InputData(Long nPort,PBYTE pBuf,DWORD nSize);
说明:这是一个视频采集卡的SDK软件包中输入从卡上得到的数据流指定大小的数据缓冲区中。
其中:nPort是通道号
pBuf是缓冲区地址
nSize是缓冲区大小
请问:pBuf这个缓冲区地址在VB中如何来获得?
解决方案 »
- 向高手求助,关于条件删除的问题。
- 在word中插入的图片怎么样设置它的版式呢,通过vba
- 怎样实现单击text1,内容全被选中
- 急啊,大家帮忙,在ACTIVEREPORT 2。0中如何在打印该组头之前划一条细线,在打印该组的组尾之前划一条细线!大虾都到哪里去了?
- VB+SQL的图书管理系统
- 提取字符串!!!!!超级~~~~~~~~~~~~~在线等!!!!!!!!50分相送,对了再加!
- 急!!VB访问远程数据库,该如何选择访问方式和编程方式
- datagrid使用问题,十万火急!
- 在先增加数据的情况下为何不能删除,而要在关闭程序并重新运行后才能删除
- 如何让activemovie在VB中运行?
- 如何计算位图和字体的大小(宽度和高度)
- 比较复杂的问题,高手来看看
ObjPrt()函数获取对象地址
StrPtr()函数获取字符串内存地址
CopyMemory ByRef ReturnValue, ByVal Address, ByVal ByteReturnValue 用来接收返回值的ByRef的变量。
Address 内存地址
Byte 字节数注意,字符串的Byte和编码有关。到底是Unicode还是其他编码要弄清楚。
内含函数:TRSbp_cmd ,
函数原型:int TRSbp_cmd(TRS_CMD *trs_cmd,TRS_RESULT *trs_result);
主要参数:trs_cmd──命令结构体,trs_result──结果结构体。命令结构体TRS_CMD
定义
typedef struct trs_cmd
{
char CmdId;
char CmdLen[4+1];
char *CmdBuf;
}TRS_CMD;结果结构体TRS_RESULT
定义
typedef struct trs_result
{
char Status;
char Rows[4+1];
char Cols[4+1];
char ResultLen[8+1];
char *ResultBuf;
}TRS_RESULT;在vb中该怎么做呀,请指教!
VC:没对其没有关系,保证地址正确
VB:强制对其
如果直接翻译的话,VB声明是这个样子:
public type TRS_CMD
CmdId as byte
CmdLen(0 to 4) as byte
CmdBuf as long
end type可在VC中看,是这样:
typedef struct trs_cmd
{
char CmdId;
char CmdLen[4+1];
BYTE fillbytes[2];
char *CmdBuf;
}TRS_CMD;
这种情况很讨厌的。有关于指针的操作,最好大部分封装在C编写的模块里面。
比如吧,对于这些结构的操作,全部放入C中处理,利用VB调用函数,对结构进行构造。
比如,简单例子:
typedef struct aa{
char A;
char B;
}AA;
编写一个C的过程,
void LetAA(char A, char B){
构造一个aa,赋值,返回地址
}在VB中调用LetAA。
不过可行性……不知有没有。主要是作用域的问题。