Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 物业及;通过Visual Studio 2010从DLL生成的TLB中缺少方法_C#_.net_Visual Studio 2010_Com_Office 2010 - Fatal编程技术网

C# 物业及;通过Visual Studio 2010从DLL生成的TLB中缺少方法

C# 物业及;通过Visual Studio 2010从DLL生成的TLB中缺少方法,c#,.net,visual-studio-2010,com,office-2010,C#,.net,Visual Studio 2010,Com,Office 2010,我在visualstudio 2010中有一个C#类库项目,我在其中添加了一个指向我的Web服务的WSDL的Web引用 我可以看到在VisualStudio中创建的代理很好。(见下面的屏幕截图) 目标:我的最终目标是能够将这些代理打包并带到VBA(Excel 2010),并能够在那里调用Web方法 我通过启用“使COM可见”和“为COM互操作注册”从这个DLL生成了一个TLB 问题:当我在Oleviewer中打开TLB时,我看到属性和方法正在丢失(请参见下面的屏幕截图) 环境: Visu

我在
visualstudio 2010
中有一个
C#类库
项目,我在其中添加了一个指向我的Web服务的WSDL的Web引用

我可以看到在VisualStudio中创建的代理很好。(见下面的屏幕截图)

目标:我的最终目标是能够将这些代理打包并带到VBA(Excel 2010),并能够在那里调用Web方法

我通过启用
“使COM可见”
“为COM互操作注册”
从这个DLL生成了一个TLB

问题:当我在Oleviewer中打开TLB时,我看到属性和方法正在丢失(请参见下面的屏幕截图)

环境

  • Visual Studio 2010 Professional(目标平台设置为x86)
  • Windows 7 x64
  • Office 2010 32位
  • .NET4.0

有人能帮我知道从DLL生成有效TLB时是否遗漏了什么吗?

这是将接口属性化为[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]的正常结果。你需要的是双重身份。这对web服务如何起作用对我来说是个谜。@HansPassant,我将其更改为InterfaceIsDual,但我仍然看到TLB中缺少属性和方法,并且在OleViewer中继承的接口中仍然显示IDispatch。请注意,中屏幕截图中显示的存根“auditInfo”不是我在VS2010中编写的,而是在向WSDL添加web引用时自动生成的。因此,我不确定是否可以更改生成的存根的行为。我完全不清楚您是如何从WSDL到屏幕截图的。您是否手动编辑自动生成的代理代码以添加属性?你当然不想那样做。考虑到这可能不起作用,你为什么不试试看它是否起作用?编写一个小VBA来测试它,在VBA中进行后期绑定调用不是问题。@HansPassant,我通过右键单击项目->添加服务引用->添加Web引用并输入WSDL的URL,将
Web引用添加到WSDL中。此外,我还能够调用接受基本类型但在调用接受复杂类型的方法时遇到问题的web方法(因为存根缺少这些属性)@HansPassant,如果您能帮助我了解在
Excel2010
中使用基于SOAP的web服务的正确方法,我将不胜感激。