| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1371 人关注过本帖
标题:[求助]C++声明的函数怎么样用到VB中?十分不解
只看楼主 加入收藏
multiple19O2
Rank: 1
等 级:新手上路
帖 子:326
专家分:0
注 册:2007-8-29
收藏
得分:0 
以下是引用Joforn在2007-8-29 12:52:25的发言:
顶啥呢,VB里面全面用Long来代替指针。

正是我表达的意思

2007-08-29 12:53
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
addressof不能用来取指针,addressof的功能是用来取公共模块中过程的入口地址,虽然从内存存储上看都是地址,但一个是在数据区一个是在代码区,二者功能也是不一样的:一个用来存储,一个用来执行。

VB QQ群:47715789
2007-08-29 12:59
multiple19O2
Rank: 1
等 级:新手上路
帖 子:326
专家分:0
注 册:2007-8-29
收藏
得分:0 
以下是引用Joforn在2007-8-29 12:59:10的发言:
addressof不能用来取指针,addressof的功能是用来取公共模块中过程的入口地址,虽然从内存存储上看都是地址,但一个是在数据区一个是在代码区,二者功能也是不一样的:一个用来存储,一个用来执行。

哦 是这样啊 学到了

就是AddressOf 后面跟的是程序代码的部分了

那C++的DLL中用到指针的就更麻烦了 幸亏VB可以自动取Long

2007-08-29 13:01
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
以下是引用Joforn在2007-8-29 12:52:25的发言:
顶啥呢,VB里面全面用Long来代替指针。

这正是我不解的地方啊!~
int *Add(int *a,int **b,char (*c)[5])
{
int *p;
*p=*a+*b;
//经过一系列等的运算
return p;
}
比如上面这个函数,如果在VB中是不是这样声明:
declare function add lib "dllname"(a as long,b as long,c as long) as long
然后这样用
dim num1 as integer,num2 as integer,str1 as string
dim rec as long
rec=add(num1,num2,str1)

这样对不对???


偶学编程,也许本身就是一个错。。。
2007-08-29 13:05
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
VB是有专门的取地址的函数的。
AddressOf—— 专门用来取过程入口地址;
VirPtr————取变量首地址;
StrPtr————取字符串首地址;
ObjPtr————取对象首地址

VB QQ群:47715789
2007-08-29 13:06
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
以下是引用coachard在2007-8-29 13:05:29的发言:

这正是我不解的地方啊!~
int *Add(int *a,int **b,char (*c)[5])
{
int *p;
*p=*a+*b;
//经过一系列等的运算
return p;
}
比如上面这个函数,如果在VB中是不是这样声明:
declare function add lib "dllname"(a as long,b as long,c as long) as long
然后这样用
dim num1 as integer,num2 as integer,str1 as string
dim rec as long
rec=add(num1,num2,str1)

这样对不对???

看来是不对的了……因为没有传递地址

To Joform 他这里如果用 ByRef呢?

2007-08-29 13:08
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
declare function add lib "dllname"(byval a as long,byval b as any,byval c as string) as long

VB QQ群:47715789
2007-08-29 13:16
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
唔 Byval……
2007-08-29 13:17
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 

调用方法自己结合我上面说的自己想吧。


VB QQ群:47715789
2007-08-29 13:18
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

如果是这样,那用byval的意思是什么?

下面这些还有问题吗????
dim num1 as integer,num2 as integer,str1 as string
dim rec as long
rec=add(virptr num1,virptr num2,strptr str1)

如果没有!还有最后一个问题没解决,关于返回值的:
我们现在用rec接收的是一个指针,(在C/C++里用*可取出并修改该指针所指的数值)在VB里现在要读出rec所指的int值该怎么办???请不吝赐教!
*************************************

去试了一下,virptr,strptr在VB中报错!~~~~

[此贴子已经被作者于2007-8-29 13:27:26编辑过]


偶学编程,也许本身就是一个错。。。
2007-08-29 13:22
快速回复:[求助]C++声明的函数怎么样用到VB中?十分不解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012112 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved