代码之家  ›  专栏  ›  技术社区  ›  Tanj

函数声明中的别名重载了吗?

  •  0
  • Tanj  · 技术社区  · 17 年前

    Declare Function TmSendByLen Lib "tmctl.dll"  Alias "TmSendByLength"(ByVal id As Integer, ByRef msg As Any, ByVal blen As Integer) As Integer
    'snip'
    
    Function TmSendByLength(ByVal id As Integer, ByVal msg As String, ByVal blen As Integer) As Integer
        TmSendByLength = TmSendByLen(id, msg, blen)
    End Function
    

    2 回复  |  直到 17 年前
        1
  •  3
  •   Ant    17 年前

    Alias没有指定函数是否完全重载,但指定的名称实际上是被调用dll中的其他名称。

    由于你的例子有点令人困惑(因为名字重复),我将使用稍微修改过的版本来解释:

    Declare Function TmSendByLen Lib "tmctl.dll" Alias "TmSendByLength" (ByVal id As Integer, ByRef msg As Any, ByVal blen As Integer) As Integer)
    
    Function InternalVersion(ByVal id As Integer, ByVal msg As String, ByVal blen As Integer) As Integer
        InternalVersion = TmSendByLen(id, msg, blen)
    End Function
    

    因此,在这个修改版本中 TmSendByLength name是实际调用被引用函数入口点的名称 tmctl.dll . TmSendByLen 这就是我们在代码中所指的,以及 InternalVersion

    我想这是这样的

    As Any here .)是否删除Alias完全取决于您,但无论哪种方式,我怀疑您都需要使用 As IntPtr .

        2
  •  2
  •   CraigTP    17 年前

    VB6中的“Alias”关键字是 可能 之后

    正如您正确指出的那样,VB6不允许“As Any”参数类型,因此从您发布的原始VB6代码中,开发人员声明了一个VB6函数,该函数恰好与DLL中的“real”函数同名,并将此函数的参数更改为只接受“msg”参数的字符串类型。

    VB6代码实际上并非如此 重载 任何功能,而是 DLL函数具有VB6特定的函数,该函数约束“msg”参数类型。

    这里有几个链接可能会有所帮助:

    VB6 "As Any" in VB.Net

    PInvoke