代码之家  ›  专栏  ›  技术社区  ›  Erx_VB.NExT.Coder

标记为受限的函数或接口,或者函数使用了Visual Basic中不支持的自动化类型

  •  4
  • Erx_VB.NExT.Coder  · 技术社区  · 14 年前

    这个错误在VB6中意味着什么?

    标记为受限的函数或接口,或者函数使用了Visual Basic中不支持的自动化类型。

    当我调用Windows XP及更高版本的dll的特定方法时,我会一直得到它(在system32中,称为upnp.dll)

    3 回复  |  直到 7 年前
        1
  •  9
  •   Hans Passant    14 年前

    这是从类型库中检索到的findbyType()的声明:

        HRESULT FindByType(
                        [in] BSTR bstrTypeURI, 
                        [in] unsigned long dwFlags, 
                        [out, retval] IUPnPDevices** pDevices);
    

    注意第二个参数,无符号长。VB6不支持无符号类型。在vb.net或c中这不是问题,它们确实支持它们。

    如果安装了Windows SDK,则此问题是可修复的。如果您有最新版本的Visual Studio,您应该拥有它。使用Visual Studio命令提示,然后:

    • 运行oleview.exe c:\windows\system32\upnp.dll
    • 键入ctrl+a、ctrl+c以复制类型库内容
    • 运行notepad.exe,ctrl+v。搜索“unsigned”并删除它。有两个。
    • 将文件保存到名为upnp.idl的临时目录中
    • 运行mild upnp.idl/tlb upnp.tlb
    • 将生成的upnp.tlb复制到项目目录中

    现在您可以添加upnp.tlb而不是upnp.dll,这样就不会再出现错误。 -

        2
  •  3
  •   Hans Olsson    14 年前

    好吧,错误消息意味着您正在调用一个不能被vb6绑定的函数,可能是因为它具有vb6不支持的参数或返回值。我有时通过编写一个简单的C++ COM对象来处理这样的问题,它调用函数并将其翻译为VB6兼容。

    你有时也会收到这个错误信息,因为各种各样的错误,但我认为你已经在谷歌上发现了这一点,所以我假设你已经检查过了。

    如果你发布你的代码(或者至少是你遇到问题的函数名),你可能会得到一个更好的答案。

        3
  •  1
  •   nmc Dihui Bao    12 年前

    我也犯了同样的错误,但当我更改了数组名时,错误就消失了。

    “map”显然不是可接受的数组名。

    错误代码: map(day, min) = Trim(Str(Int(r / 1000)))

    无错误代码: mapsymbol(day, min) = Trim(Str(Int(r / 1000)) )