| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1371 人关注过本帖
标题:[求助]C++声明的函数怎么样用到VB中?十分不解
取消只看楼主 加入收藏
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
 问题点数:0 回复次数:8 
[求助]C++声明的函数怎么样用到VB中?十分不解

这个问题的标题我想了很久,都不知道怎么写。问题是这样的:
最近在看API过程中碰到了很多函数在平常的资料中都找不到,只好上MSDN上搜。无奈上面的资料大多数用的都是C++的语法。现在问题就出来了,众所周知C++中有指针这一特定类型的数据,而VB中没有。我看了很久,都无法理解VB是怎么处理这样在C++中为指针的数据类型。(望指点迷津~)

现在我想了一个例子,希望大家能为我解惑:
假设现有一个由C++写的DLL名称为ADD.DLL,里面有如下函数:

int *Add(int *a,int **b,char (*c)[5])
{
int *p;
*p=*a+*b;
//经过一系列等的运算
return p;
}
(我知道上面这个函数在内存上存在很大危险,为了简便我随手写的而已,不过请先别管这方面问题)
在这个函数中,有一级指针也有二级指针,更有指针数组。返回值又是一级指针。我在VB中该以如何的形式调用该函数呢??又要用何种数据类型接收其返回值?之后该如何处理?

请各位大侠指教下~~~~~~~在此谢过!

[此贴子已经被作者于2007-8-28 21:30:25编辑过]

搜索更多相关主题的帖子: 函数 声明 
2007-08-28 21:29
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
因为现在还不会用VC++写DLL,而且我没装VC++,所以我不好试。。。

我只想用这个例子类比API中的用法,,,所以我想哪得到一个比较确定的答案,虽然这有点像不劳而获。。。不过还请多见谅!!!

现在就有个疑问,如果用addressof来运算,那么一级指针用一个adressof那二级指针岂不是用两个addressof????

偶学编程,也许本身就是一个错。。。
2007-08-28 21:52
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
以下是引用multiple1902在2007-8-28 21:56:44的发言:
恐怕不是

C++中能用**a是因为*a可以作为指针使用

但是VB里AddressOf AddressOf Variable_a这里,AddressOf Variable_a不能作为一个变量使用,它的值是我们需要的(目标地址),但AddressOf的参数是一个变量,AddressOf能自动转换为指针,AddressOf AddressOf Variable_a得到的可能是临时变量(AddressOf Variable_a)的指针。

可能有些API能完成类似操作吧……

就这样解释好像有点不大对。OleCreatePictureIndirect函数的最后一个参数,在VB中是IPic as IPicture,而在C++中为void**
而调用时,VB中只传了实参IPic进去而已,而没有用addressof来为IPic取地址后再传进去!


偶学编程,也许本身就是一个错。。。
2007-08-28 22:12
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

谢谢multiple1902的解答!

没想到才一个晚上没来就沉下去了,顶~

盼望有另外的高手来发表下见解!


偶学编程,也许本身就是一个错。。。
2007-08-29 09:48
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
再顶一下!

偶学编程,也许本身就是一个错。。。
2007-08-29 10:14
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

再顶一次!


偶学编程,也许本身就是一个错。。。
2007-08-29 12:44
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
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
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
哦,好的,真的很感谢

剩下的零星问题我以后再实践中再解决!~

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



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

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