网上搜了一下,知道怎么用vb制作标准dll,但是现在我想做的标准dll是有1个自定义数据类型的传递参数,请问该怎么做这个dll。谢谢大神们指点迷津。
PS:VC一点不会,只会一点VB。

解决方案 »

  1.   

    VB制作的所谓“标准”dll,只能由VB程序调用,不能被别的语言的程序调用。制作标准dll的原理是,通过替换链接器的参数,让链接器将标准模块的函数作为导出函数输出。但是因为VB是闭源的,没有人能够真正修改VB的编译器和运行时。而VB产生的程序,无论dll还是exe都需要VB虚拟机的支持,即便是本地代码。用VB编写的“标准”dll,因为仍然依赖VB虚拟机,并且缺少必要的初始化,所以无法正常运行。除非调用dll的是VB程序,因为在此之前,VB虚拟机已经被程序初始化过了。
      

  2.   

    总之,用VB制作所谓的标准dll毫无意义。建议你不要在此浪费时间了。
      

  3.   

    是啊。我只会一点VB,做的dll只用VB来调用,能做吗?做Active DLL,在标准模块里写函数,编译时老是提示不能用自定义类型作为参数,怎么搞定?
      

  4.   

    打个比方吧,先新建ActiveX DLL,在类模块里
    Type Student
        Name As String
        ID As String
        Sex As Boolean
    End Type
    在标准模块里
    Public Function FindStudent(ByRef AStudent As Student)
        AStudent.Name = "Mike"
        AStudent.ID = "10000"
        AStudent.Sex = 1
    End Function
    编译生成标准DLL,UDCDll.dll,然后新建EXE,在标准模块里
    Type Student
        Name As String
        ID As String
        Sex As Boolean
    End Type
    Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (ByRef AStudent As Student)
    在窗体里
    Private Sub Command1_Click()
        Dim ABC As Student
        Call FindStudent(ABC)
        Label1.Caption = ABC.Name
        Label2.Caption = ABC.ID
        Label3.Caption = ABC.Sex
    End Sub
    运行时点击按钮,什么报错信息和运行结果都没有,VB窗口直接就关掉了。
    本人VB很菜,不知哪儿有问题,还请指点,谢谢。
      

  5.   

    看看这个附件能不能用(我没试过)
    http://download.csdn.net/download/dsq2006/1763933
      

  6.   

    百度 vb_dll_link 试试
      

  7.   

    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, Optional ByVal Length As Long = 4)
    Public Declare Function FindStudent Lib "C:\Program Files\Microsoft Visual Studio\VB98\UDCDll.dll" (Byval AStudent As long)
    Dim ABC As Student
    dim p1 as long
    CopyMemory p1,byval varptr(abc),4
    FindStudent p1
    试试
      

  8.   


    打个比方吧,先新建ActiveX DLL,在类模块里Type Student
        Name As String
        ID As String
        Sex As Boolean
    End Type在标准模块里
    Public Function FindStudent(ByRef AStudent As Student)
        AStudent.Name = "Mike"
        AStudent.ID = "10000"
        AStudent.Sex = 1
    End Function自己定义的类型和调用类型的公用函数不能放在同一个工程里
    解决方案有两个:
    一、分拆成两个工程
        工程A定义类型   工程B引用工程A后,可以用所有A中的自定义类型二、修改函数定义,将Public前缀去掉(实际变为private)或将"ByRef AStudent As Student"这样的直接定义类型修改为"ByRef AStudent As Variant"不影响功能使用
      

  9.   

    如果仅仅是制作 DLL,VC++ 所需要学习的内容并不多,两个小时内可以掌握。
      

  10.   

    使用混合编程,VB6, VS 通吃,用VS设计好DLL,软后用消息机制互相通讯传替参数
      

  11.   

    你们觉得我这个VB写的标准DLL不能被其它语言调用?试试先,再说话
    http://download.csdn.net/detail/taoguangye/3913144