参数中使用公共类型或枚举时报错BC30909的原因(VB.NET)

我的枚举与类都是声明在模块里的,全是Public形式:

Module ModDef
Public Declare Function GetTickCount Lib "kernel32.dll" () As UInteger
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Int32)

Public Enum AxisEnum
AXIS_X = 0
AXIS_Y
AXIS_Z
AXIS_U
End Enum


使用到枚举的一个方法:

Public Sub AxisStop(ByVal AxisIndex As [b]AxisEnum[/b])
'单轴停止
End Sub


编译时提示As AxisEnum处:

http://msdn.microsoft.com/zh-cn/library/90htzsex(VS.80).aspx

而其中的API又是确实可以全局使用的!奇了怪了,已经是Public了呀!!

不得其解,上GOOGLE搜索,发现了一篇CSDN的已结帖子:

http://topic.csdn.net/u/20100322/19/dbd74639-faf9-4e5a-91bc-2e7a0bef0ac4.html

咋一看,好象没啥不同,也是把类型改为了Public解决问题的,为啥我这里就不行?难道是因为原帖主用的不是VS2008?

仔细再看,发现他那个类型定义在类定义之外,即Public Class Form1以上的范围,则不属于类的内部.....难道...?

马上把枚举提到模块外部:

Public Enum AxisEnum
AXIS_X = 0
AXIS_Y
AXIS_Z
AXIS_U
End Enum

Module ModDef
Public Declare Function GetTickCount Lib "kernel32.dll" () As UInteger
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Int32)

再看,就OK了......汗一个.

然后又想了一下,难道VB.NET里的模块并不像VB6里那样是完全全局范围么?

又把枚举拖回来(可怜的枚举....),在Module前面加个Public看看....

我倒,果然是这样,就正确了!

不明白为什么模块要有这种区别呢?

有待以后了解.....完全面向对象,还有很多不习惯

评论: 0 | 引用: 0 | 查看次数: 823