这个问题怎么解决
Compile error:Only public user defined types defined in public object modules can be used as parameters or return types for public procedure of class modules or as fields of public user defined types发生问题的地方
Public Property Let AllRegister(reg1 As Register)
    Reg = reg1
End PropertyRegister被定义在Simulator.bas中
Public Type Instruction
    Code As PCode
    Param1 As Long
    Param2 As Long
    Param3 As Long
End Type他的意思是不是只有定义在Module中的public用户类型才能作为参数
但是我不明白的是
那个类型明明被定义在了bas Module中了啊?
谢谢大家告诉我应该怎么弄

解决方案 »

  1.   

    粘贴错了
    Register被定义在Simulator.bas中
    Public Type Register
        A As Long
        B As Long
        D As Long
        I As Long
        S As Long
        F As Long
        IP As Long
    End Type
      

  2.   

    有兩個方法:
    1.將自定義類型Register定義成類.
    2.在原工程基礎上添加一個ActiveDll(即與原工程同一個工程組),這樣你就可以在這個類中定義Public的自定義類型啦,在工程裡面可用CreateObject來引用這個類.
      

  3.   

    VB规定,只有在公共对象模块中定义的公共用户定义类型可以作为参数、类模块的公共过程返回类型、公共用户定义类型的字段使用。因此定义在模块中的类型是不能作为参数类型的,你可以:1. 将参函数原型的参数类型定义为Variant。虽然很简单,但不太科学。2. 将用户自定义类型更换成一个类定义。如:
       添加一个类模块,类名为Register, 写入代码:
       public A As Long
       public  B As Long
       public  D As Long
       public  I As Long
       public  S As Long
       public  F As Long
       public  IP As Long   这样你就可以定义了。通常情况下推荐此方法。3. 修改为弱引用,即向其传递一个Long地址,然后用CopyMemory进行复制,在类属性中使用这个方法比较麻烦,但效率较高。