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

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

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

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

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

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

注意第二个参数,unsigned long。 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的临时目录中
  • 运行midl upnp.idl / tlb upnp.tlb
  • 将生成的upnp.tlb复制到项目目录中

您现在可以添加upnp.tlb而不是upnp.dll,您不应再收到错误。 –

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

由于各种拼写错误,您有时也会收到此错误消息,但我认为您已经发现在Google上进行搜索,所以我假设您已经检查过了。

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

我得到了同样的错误但是当我更改了我的数组名称时,错误就消失了。

“Map”显然不是一个可接受的数组名称。

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

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