注册 登录
编程论坛 VB6论坛

为何把整个自定义结构体传递给动态链接库函数作参数时出错?(代码在贴内)

shi781203 发布于 2013-11-20 13:17, 511 次点击
以下代码进行编译时总是弹出提示“只有定义在公共对象模块中用户定义类型和变体类型相互转换或传递给后期绑定功能”

Dim Pais(52) As PaiType    '定义了52个结构数组元素用作牌信息
Dim DllObj as Object    '定义一个Dll动态链接库对象
Dim StrName as String

Private Type PaiType    '定义一个结构体为PaiType
    PaiZhi As Integer
    PaiHua As Integer
    Pai As Integer
End Type

Private Sub Form_Load()
   StrName = "GameLan"
   Shell ("regsvr32 " & App.Path & "\" & StrName & ".dll /s")    '动态链接库链接
   Set DllObj = CreateObject(StrName & ".GameClass")
……
……
……
    Call DllObj.XiPaiGuoCheng(Pais)    ’执行动态链接库的洗牌过程--实参为结构数组名(编译时代码停在此行的“Paisi”中)
End Sub

'动态链接库文件GameLan.Dll内的函数
Public Sub XiPaiGuoCheng(Pais_c() As PaiType)   '定义洗牌过程--形参为区别实参在结构数名后加了“_c”
……
……
……
End Sub
'上述结构体如果只传递在当前窗体中的函数就可以通过编译并且能正常运行!
3 回复
#2
bczgvip2013-11-20 21:58
公共结构体请声明在模块中。
#3
shi7812032013-11-21 15:15
以下是引用bczgvip在2013-11-20 21:58:47的发言:

公共结构体请声明在模块中。

请问你所说的模块在哪里?请引用我的例子说明一下吧!
#4
bczgvip2013-11-22 06:20
呵呵,看来被类型库折磨得不轻啊。
把结构注释掉,用动态库自配的类型。F2 看看对象吧。
1