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

时间:2010-10-19 06:15:54

标签: c# .net vb.net visual-studio vb6

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

  

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

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

3 个答案:

答案 0 :(得分:9)

这是从类型库中检索到的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,您不应再收到错误。   -

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

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

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

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

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