C# 调用.FindByType会导致VB6错误,帮助?

C# 调用.FindByType会导致VB6错误,帮助?,c#,.net,vb.net,visual-studio,vb6,C#,.net,Vb.net,Visual Studio,Vb6,可能重复: 基本上,我只是使用uPNPDeviceFinder类搜索uPnP设备。FindByType方法,.FindByDN起作用,但FindByType给出了一个错误: 当我尝试调用该方法时,VB6出现编译错误: Function or interface marked as restricted, or the function uses an Automation type not supported in Visual Basic. 我甚至不知道这意味着什么,也不知道为什么我会得到

可能重复:

基本上,我只是使用uPNPDeviceFinder类搜索uPnP设备。FindByType方法,.FindByDN起作用,但FindByType给出了一个错误:

当我尝试调用该方法时,VB6出现编译错误:

Function or interface marked as restricted, or the function
uses an Automation type not supported in Visual Basic.

我甚至不知道这意味着什么,也不知道为什么我会得到它。我正在引用和使用YRU system32目录中的upnp.dll文件-当我在VS2010(比如vb.net)中引用和使用该文件时,它一切正常,没有发现任何问题,但在VB6中,我发现了上面的错误,有人知道吗?谢谢。

该函数在类型库中声明为

HRESULT FindByType(
                    [in] BSTR bstrTypeURI, 
                    [in] unsigned long dwFlags, 
                    [out, retval] IUPnPDevices** pDevices);
并且无符号参数
dwFlags
在VB6中不可用

Function FindByType(bstrTypeURI As String, dwFlags As <Unsupported variant type>) As UPnPDevices
函数FindByType(bstrTypeURI作为字符串,dwFlags作为字符串)作为UPnPDevices
您必须通过将参数类型更改为兼容的VB6类型来“VB fy”此类型库

编辑:

是我尝试用VB编辑这个类型库,使用风险自负。使用
mktyplib
编译IDL


请注意,您不必将
vbupnp.tlb
发送给您的用户,您不必在他们的机器上注册它。只需在您的开发机器上注册并使用它。

不要创建新问题来输入更多信息,编辑您的第一个问题。这个问题特定于findbytype,另一个问题是一般性的,关于vb错误以及它的含义,这是两个不同的问题,谢谢。@ho1,不要到处试图删除我的帖子,我需要报道,因为问题太模糊了我在上一次评论中给出了原因。不,它们是同一个问题,措辞略有不同,从事实上可以看出,几乎相同的答案对这两个问题都是正确的。但无论如何,我试图关闭这个问题只会使它链接回第一个问题,并且至少在2天内不能删除它,所以你可能没有失去任何曝光。但是要小心,太多重复的问题可能会惹恼一些本来可能已经回答了他们的人。嗨,我该怎么做,或者我可以在vb端做什么来让它工作,因为我不能编辑dll?感谢您将引用移到
upnp.dll
并改用
vbupnp.tlb
。如果你在类名前面加上
UPNPLib
将其改为
VBUPNPLib
。谢谢你,伙计,你是一个账本,我试图让它工作,但midl发出了c预编译器警告,无法从idl转换为tlb,谢谢。向上投票并被接受为答案。顺便说一句,你推荐mktyplib而不是midl吗?两者都是可用的,但
midl
倾向于自动生成内容——枚举名称等——因此
mktyplib
更精简,并且专门针对Typelib,并包含在VB6发行版中,因此它是VB6中的“官方”工具
midl
的主要目的是生成接口代理/存根,TypeLib有点像副产品。