d6的dll还有点问题,也不知道是bug,还是我不会!
处理不了装载动态库和卸载动态库!

解决方案 »

  1.   

    使用值或引用传递
    在缺省的情况下,Visual Basic 以引用方式传递所有参数。这意味着并没有传递实际的参数值,Visual Basic 只传递了数据的 32 位地址。在 Declare 语句中不要求包含 ByRef 关键字,但是如果包含该关键字,就能够清楚地看出数据是以何种方式传递的。许多 DLL 过程要求参数以值方式传递。这意味着它们需要实际的数据,而不是数据的内存地址。如果过程需要一个传值参数,而传递给它的参数是一个指针,那么由于得到了错误的数据,该过程将不能正确地工作。要使参数以使用值方式传递,在 Declare 语句中需要在参数声明的前面加上 ByVal 关键字。例如,InvertRect 过程要求第一个参数使用值,而第二个使用引用:Declare Function InvertRect Lib "user32" Alias _
    "InvertRectA" (ByVal hdc As Long, _
    lpRect As RECT) As Long也可以在调用过程时使用 ByVal 关键字。注意   在查看使用 C 语言语法的 DLL 过程文档时,请记住 C 以传值方式传递数组以外的参数。字符串参数是一个特例。如果以使用值方式传递字符串,那么传递的将是该字符串中第一个数据字节的地址;如果以使用引用方式传递字符串,那么实际传递的将是用来保存另一个地址的内存单元的地址;后面的“地址”实际是字符串的第一个数据字节的内存地址。本章后面的帮助主题“将字符串传递到 DLL 过程”将解释如何确定字符串参数传递的正确方式。不标准的名称
    有时,个别的 DLL 过程的名称不是有效的标识符。例如,它可能包含了非法的字符(如连字符),或者名称是 Visual Basic 的关键字(如 GetObject)。在这种情况下,可以使用 Alias 关键字。例如,操作环境 DLL 中的某些过程名以下划线开始。尽管在 Visual Basic 标识符中允许使用下划线,但是下划线不能作为标识符的第一个字符。为了使用这种过程,必须先声明一个名称合法的过程,然后用 Alias 子句引用过程的真实名称:Declare Function lopen Lib "kernel32" Alias "_lopen" _
    (ByVal lpPathName As String, ByVal iReadWrite _
    As Long) As Long在上例中,lopen 是 Visual Basic 中使用的过程名称。而 _lopen 则是 DLL 中可以识别的名称。为了使用方便,也可以使用 Alias 子句改变过程的名字。如果使用自己的名称替代了过程原来的名称(例如使用 WinDir 代替 GetWindowsDirectoryA),那么必须在文档中清楚地说明这种修改,从而便于将来对文档进行维护。