各位好,我在写一个VC与VB接口程序的时候出现了点接口上的问题// VC 函数部分
DWORD _stdcall VCDomo(BYTE * BytesBuff,DWORD bSize)
{
DWORD i=0;
BytesBuff=(BYTE*)realloc(BytesBuff,bSize+5); // 这里的时候出错
for(i=0;i<5;i++){
BytesBuff[bSize+i]=0xAA;
}
Return 0;
}
' VB 函数声明
Private Declare Function VCDomo Lib "VCDomo.dll" (ByRef bBytes As Any, ByVal bSize As Long) As Long
' 按钮事件处理过程
Private Sub Command1_Click()
Dim BytesArray() As Byte '定义数组变量
Redim BytesArray(4) '设置数组维数
VCDomo BytesArray(0),5 '调用 VC 接口函数增加数组范围
Msgbox Ubound(BytesArray) '显示数组范围
End Sub
上面程序的目的是想将 VB 传到 VC 函数中的字节数组维数放大返回给 VB,但是老出问题。
我还用过 GlobalReAlloc 和 LocalReAlloc 来处理,虽然没有出错,但是返回后没有效果。
希望高手们能给与解答。
DWORD _stdcall VCDomo(BYTE * BytesBuff,DWORD bSize)
{
DWORD i=0;
BytesBuff=(BYTE*)realloc(BytesBuff,bSize+5); // 这里的时候出错
for(i=0;i<5;i++){
BytesBuff[bSize+i]=0xAA;
}
Return 0;
}
' VB 函数声明
Private Declare Function VCDomo Lib "VCDomo.dll" (ByRef bBytes As Any, ByVal bSize As Long) As Long
' 按钮事件处理过程
Private Sub Command1_Click()
Dim BytesArray() As Byte '定义数组变量
Redim BytesArray(4) '设置数组维数
VCDomo BytesArray(0),5 '调用 VC 接口函数增加数组范围
Msgbox Ubound(BytesArray) '显示数组范围
End Sub
上面程序的目的是想将 VB 传到 VC 函数中的字节数组维数放大返回给 VB,但是老出问题。
我还用过 GlobalReAlloc 和 LocalReAlloc 来处理,虽然没有出错,但是返回后没有效果。
希望高手们能给与解答。
解决方案 »
- 关于打印,请大家指教,谢谢。
- 错误 2 error C2664: “sendto”: 不能将参数 2 从“CString”转换为“const char *”
- 请问如何获得下一个窗口视图的指针?
- 用FindWindow怎么找到菜单项目,并发送相应的消息
- 我装的DirectX9.0 SDK中怎么没有streams.h这个文件呢?
- 对话框中的“打开”键问题!
- 关于文件的读写---请来帮我!如何在实现自动读写文件数据
- 如何改变多文档框架窗口标题栏的高度?sos,高分求助
- 急,解决马上给分!怎样把数组中的数写到磁盘文件上去?
- 请问怎样使得一个程序在退出后自动重新启动.
- 请问大家是如何制作程序图标的
- 最简单的问题,请勿试,仅凭推测。
但在VC处理中则需要动态的把这个数组加大或缩小,如果在函数定义上就固定了范围,
是不是不大合适呢?
{
DWORD i=0;
*ppBytesBuff=(BYTE*)GlobalReAlloc(bSize+5); // 这里的时候出错
for(i=0;i<5;i++){
(*BytesBuff)[bSize+i]=0xAA;
}
Return 0;
}
DWORD _stdcall VCDomo(BYTE BytesBuff[1],DWORD bSize)
这么定义没有出错,也能正常收到VB里的数组信息,但是经过在使用
BytesBuff=(BYTE*)realloc(BytesBuff,bSize+5);
的时候同样会出错
*ppBytesBuff=(BYTE*)GlobalReAlloc(bSize+5);GlobalReAlloc函数的结构是
WINBASEAPI
HGLOBAL
WINAPI
GlobalReAlloc(
HGLOBAL hMem,
DWORD dwBytes,
UINT uFlags
);
但是我 GlobalReAlloc(*BytesBuff,5); 这么用也不行,编译都编译不了
{
DWORD i=0;
BytesBuff=(BYTE*)malloc(10);// 加上这行
BytesBuff=(BYTE*)realloc(BytesBuff,bSize+5);
for(i=0;i<5;i++){
BytesBuff[bSize+i]=0xAA;
}
Return 0;
}
{
DWORD i=0;
GlobalReAlloc(*&BytesBuff,bSize+5,GMEM_ZEROINIT);
for(i=0;i<5;i++){
(*BytesBuff)[bSize+i]=0xAA;
}
return 0;
}
DWORD _stdcall VCDomo(BYTE *BytesBuff,DWORD bSize)
{
BYTE *P;
DWORD i=0;
P=(BYTE*)malloc(bSize);// 加上这行
BytesBuff=(BYTE*)realloc(BytesBuff,bSize+5);
if(!P) BytesBuff =P; //防止memory leak
for(i=0;i<5;i++){
BytesBuff[bSize+i]=0xAA;
}
Return 0;
}
{
DWORD i=0;
BytesBuff=(BYTE*)malloc(bSize);// 加上这行
BytesBuff=(BYTE*)realloc(BytesBuff,bSize+5);
for(i=0;i<5;i++){
BytesBuff[bSize+i]=0xAA;
}
return 0;
}
Private Declare Function VCDomo Lib "MMEC32.dll" (ByRef bBytes As Any, ByVal bSize As Long) As Long
Private Sub Command2_Click()
Dim BytesArray() As Byte '定义数组变量
ReDim BytesArray(4) '设置数组维数
VCDomo BytesArray(0), 5 '调用 VC 接口函数增加数组范围
MsgBox UBound(BytesArray) '显示数组范围
End Sub结果MSGBOX弹出来的是 4
只是会增加函数使用的复杂性,如果想使用简单点,就是直接在VC里改变传过来的数组维数返
回给VB是最好的。如果程序在VB里做,效果就完全不同:Private Sub Command2_Click()
Dim BytesArray() As Byte '定义数组变量
ReDim BytesArray(4) '设置数组维数
VBDomo BytesArray, 5 '调用 VC 接口函数增加数组范围
MsgBox UBound(BytesArray) '显示数组范围
End Sub
Private Function VBDomo(ByRef BytesBuff() As Byte, ByVal bSize As Long) As Long
Dim i As Long
ReDim Preserve BytesBuff((bSize-1) + 5) '设置数组维数
For i = 0 To 5 - 1
BytesBuff(bSize + i) = &HAA
Next i
VBDomo = 0
End Function结果MSGBOX弹出来的是 9
我想用VC实现的就是类似的效果,希望兄弟们能伸出援手帮一下