怎么在VB中实现两个窗体的数组的传递 能给段代码么 急

怎么在VB中实现两个窗体的数组的传递 能给段代码么 急,第1张

要是共用的数组,在模块里声明一个公共的数组

比如,新建个模块Module1

在Module1中

定义一个public的数据变量

Public

aa(3)

As

Integer

所有的窗体都可以用他了。

简单的给你说一句吧!

public

数组名()as

long是你的定义

这句是对的,但你放错位置了

不是放窗体中,而是新建模块,放模块中这样全局有效!

你前半句说的是错的,后面也是错的

public

sub

define_array()

'这里是模块(过程)的头,这句是对的

public

可要可不要

public

an_array()

as

long

'在sub()end

sub中不能使用public来什么变量,直接用dim

end

sub

关于使用过程:call

define_array()

'过程名后面不能跟括号,除非里面传有参数

直接call

define_array

define_array

redim

an_array(5)

'这句是对的

对动态数组分配空间

先说说VC++的编程。首先在VC++中生成Win32 DLL工程。在这个工程中添加几个函数供VB用户调用。一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必须是export的。要做到第一条,只须在函数声明前加上__stdcall关键字。如:

short __stdcall sample(short nLen, short buffer)

要做到第二条,需要在def文件中加上如下的几行:

EXPORTS

sample @1

这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。注意这里的函数名是区分大小写的。至于你说的需要传递大量数据,可以这样做,在VB中用一个数组存放数据,然后将该数组的大小和地址传给VC(至于如何在VB中编程我会在下面介绍)。就象上面的例子,nLen是数组大小,buffer是数组地址,有了这两条,你可以象使用VC的数组一样进行处理了。至于输出图形,可以生成WMF或BMP格式,让VB调用。不过,我认为也可以直接输出到视窗,只要VB将窗口的句柄hWnd和hDC以及视窗的绘图位置(VB和VC采用的坐标系必须一致才行)传给VC就行了。而VB的AutoRedraw属性必须为False,在Paint事件中调用VC的绘图程序。

再谈谈VB的编程。VB调用DLL的方法和调用Windows API的方法是一样的,一般在VB的书中有介绍。对于上面一个例子,先要声明VC函数:

Declare Function sample Lib "mydlldll" (ByVal nLen As Integer, buffer As Integer) As Integer

这里mydlldll是你的dll的名字。你可能已经注意到了两个参数的声明有所不同,第一个参数加上了ByVal。规则是这样的:如果在VC中某个参数声明为指针和数组,就不加ByVal,否则都要加上ByVal。在VB中调用这个函数采用这样的语法:

sample 10, a(0)

这里的a()数组是用来存放数据的,10为数组长度,这里的第二个参数不能是a(),而必须是要传递的数据中的第一个。这是VB编程的关键。

下面在说几个可能遇到的问题。一个问题是VB可能报告找不到dll,你可以把dll放到system目录下,并确保VB的Declare语句正确。另一个问题是VB报告找不到需要的函数,这通常是因为在VC中def文件没设置。第三种情况是VB告诉不能进行转换,这可能是在VC中没有加上__stdcall关键字,也可能是VB和VC的参数类型不一致,注意在VC中int是4个字节(相当于VB的Long),而VB的Integer只有2个字节。必须保证VB和VC的参数个数相同,所占字节数也一致。最后一个要注意的问题是VC中绝对不能出现数组越界的情况,否则会导致VB程序崩溃。

总的来说,你和你的伙伴需要一些时间来进行协调和摸索,但这种方法绝对可行,也不难掌握。

由于vb的理念所致,他没有指针的应用,所以你的想法不能用常规的vb做法实现。但vb其实并不是没有指针,只是不推荐使用,如果一定要这样,可以使用强制指针类型,这个网上也有,你可以找找,不过确实,不推荐,因为这样并不安全。

其实,可以在传递参数之前做一些别的工作,比如把你要的数据先复制到一个新的数组里,然后在传递这个新的数组。虽然效率低了,但更加安全。。。这就是vb的理念,没办法~

两种方法:

1

在模块中用

Public

定义数组,可在模块和窗体直接访问,不用传递:

Public

opq(20,

3)

As

Long

2------在窗体中定义数组,

Dim

opq(20,

3)

As

Long

Private

Sub

Command1_Click()

opq(1,

1)

=

2

dd

=

sss(opq)

End

Sub

------模块代码这样写:

Public

Function

sss(Zu

As

Variant)

sss

=

Zu(1,

1)

End

Function

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12154250.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存