vb调用VC的DLL中结构体参数传递问题,搜遍百度,GOOGLE也没有找到答案,请高手赐教!

longmingli 2009-02-04 10:37:12
VB调用VC的DLL中,有一参数为RECT,
RECT在VC里为结构体,其定义为:
typedef struct tagRECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;

在VB调用时,需要定义与RECT相对应的类型,定义为:
Public Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type


在VB里的调用声明:

Public Declare Function codeBar Lib "CodeBar.dll" Alias "_codeBar@36" (ByVal pBitInfoHead As Long, ret As RECT, ByVal gray As Long, ByVal EXT As Long, ByVal way As Long, ByVal barType As Long) As Long

在VB里调用VC的DLL:
dim ret as RECT
dim ImagePtr as LONG '此变量为指针,用二进制表示地址
dim lTag as LONG '此变量为指针,用二进制表示地址,返回值也是个指针
lTag = codeBar(ImagePtr, ret, 150, m_39, 15, 1)

调用时出现约定错误,错误代码为49


...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-02-07
  • 打赏
  • 举报
回复
函数的第1个参数要给一个地址,ImagePtr赋值了吗?
僵哥 2009-02-04
  • 打赏
  • 举报
回复
首先把C++的原型贴出来。
supergreenbean 2009-02-04
  • 打赏
  • 举报
回复
那么就是你函数声明的问题了

你把函数原型贴来看看
白发程序猿 2009-02-04
  • 打赏
  • 举报
回复
把VB声明的结构类型的名字改成与dll中一样的名字试一下
longmingli 2009-02-04
  • 打赏
  • 举报
回复
函数原型是__stdcall,这个没有问题的,只是参数的问题才出现约定错误.
supergreenbean 2009-02-04
  • 打赏
  • 举报
回复
你函数原型先看看,是不是__stdcall的
supergreenbean 2009-02-04
  • 打赏
  • 举报
回复
Public Declare Function codeBar Lib "CodeBar.dll" Alias "_codeBar@36" (ByVal pBitInfoHead As Long, ret As RECT, ByVal gray As Byte, ByVal EXT As Byte, ByVal way As Long, ByVal barType As Long) As Long
longmingli 2009-02-04
  • 打赏
  • 举报
回复
听某位老兄说,在VB调用VC里的DLL,不能用VB的自定义类型作为参数,
longmingli 2009-02-04
  • 打赏
  • 举报
回复

VC里的函数原型:

CODEBARDLL_API DecodeInfo* _stdcall codeBar(LPBYTE pDib,RECT rect,BYTE gray,bool EXT,int way,int barType);

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧