关于vb调用vc写的Dll问题

langshen 2005-02-28 02:07:54
我又一个用VC写的DLL,想用VB调用
DLL的函数

premain(int *icfrx,float *irowx,char *filename,char (*RowName)[10]......)

我应该怎么在VB中声明着几个变量,并调用DLL中的函数?
谢谢大虾们!
...全文
115 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
langshen 2005-03-02
我的程序是传入一个文件名称,用dll读取这个文件,把结果(几个数组)传回vb,可以实现么?
回复
langshen 2005-03-02
因为你dll的形参是指针,所以在用Vb中传参的时候会出现内存混乱的问题。建议将所有的Dll
中的指针参数变成long形,然后在函数中再强行将其转换成指针,这样在用vb传参的时候,你直接将你定义的变量用Varptr(变量)取一个long形的地址传给VC,还有vb中尽量避免用byref地址传递,因为vb,vc对各种数据类型的变量内存的分配机制不同,急用以出现内存混乱的问题。


可以写的详细一点么?给个例子
回复
langshen 2005-03-02
没好用啊,是不是因为vb中的数组定义的问题?
回复
caojingtai 2005-03-02
因为你dll的形参是指针,所以在用Vb中传参的时候会出现内存混乱的问题。建议将所有的Dll
中的指针参数变成long形,然后在函数中再强行将其转换成指针,这样在用vb传参的时候,你直接将你定义的变量用Varptr(变量)取一个long形的地址传给VC,还有vb中尽量避免用byref地址传递,因为vb,vc对各种数据类型的变量内存的分配机制不同,急用以出现内存混乱的问题。
回复
qiangorqiang 2005-03-02
C++中你试一试在函数的定义中加上__sdtcall。如:void __stdcall xxxx(int ...);
回复
langshen 2005-03-02
我试过了,怎么数据传不出来啊?还有什么要注意的东西么?
我在vb中的变量声明如下:

Public Declare Function premain Lib "xxxx.Dll" Alias "_xxxx" (ByRef icfrx As Integer, ByRef irowx As Double, ByVal filename As String, ByVal RowName(10) As String)

dim icfrx() as integer
dim irowx() as double

rent = _xxxx(icfrx(0),irowx(0)……)

vc中的函数 _xxxx(int *icfrx,float *irowx……)
{
icfrx = read.icfrx;
irowx = read.irowx;
……
}


这样有什么错误么?怎么数据传不出来啊?
回复
langshen 2005-03-01
各位大虾们,帮帮忙啊!!
回复
qiangorqiang 2005-03-01
Public Declare Function premain Lib "xxxx.Dll" Alias "_xxxx" (ByRef icfrx As Integer, ByRef irowx As Double, ByVal filename As String, ByVal RowName(10) As String)
回复
qiangorqiang 2005-03-01
Public Declare Function premainLib "xxxx.Dll" Alias "_xxxx" (ByRef icfrx As Integer, ByRef irowx As Double, ByVal filename As String, ByVal RowName(10) As String)
回复
langshen 2005-02-28
在VB的变量声明中怎么定义啊?
回复
DerryZhang 2005-02-28
Public Declare Function premain(ByRef icfrx As Integer, ByRef irowx As Double, ByVal filename As String, ByVal RowName(10) As String)


谨供参考
回复
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-02-28 02:07
社区公告
暂无公告