2017-03-03 138 views
3

这个(旧)COM DLL似乎没有64位版本的tlbinf32.dll,用于提取COM组件的信息。 (见SO answertlbinf32.dll在一个64位的.Net应用程序中

我需要从64位C#应用程序访问它。 我没有设法将其托管到单独的代理过程中,我仍然获得例外REGDB_E_CLASSNOTREG。我的代码适用于x86平台,但我必须为64位实现它。

任何人都可以通过一步一步的过程帮助我将其启动到代孕项目(Dllhost) - 或者可能是另一种使用它的方法吗?

你知道一个更好的替代方法来浏览槽的本机COM Dll的所有方法类吗?

+1

这是不是很清楚你期望任何人在这里做什么。找到替代品并不困难,所有这些接口都可以在System.Runtime.InteropServices.ComTypes命名空间的.NET中使用。你需要的唯一额外的东西是[LoadTypeLib()的pinvoke声明](http://pinvoke.net/default.aspx/oleaut32/LoadTypeLib.html)。 –

+0

我试图动态地发现COM DLL的方法,参数,枚举类。 'tlbinf32.dll'对此非常方便(请参阅上面提到的SO答案),System.Runtime.InteropServices.ComTypes命名空间semms更麻烦,因为我需要通过所有IDispatch并使用需要的IntPtr被编组。 – Malick

+0

@Hans对不起,链接到tlbinf32.dll的API是错误的,我删除它。 – Malick

回答

3
  • 打开Windows的‘组件服务’
  • 开放节点,以‘我的电脑/ COM +应用’
  • 单击鼠标右键,选择添加新的应用程序
  • 选择一个‘空的应用程序’,名称它的“tlbinf”例如
  • 请确保您选择“服务器应用程序”(意思是它的代理向导将很好地帮助您创建)
  • 选择您希望服务器应用程序运行的用户为(为了测试你可以选择Ë交互式用户,但这是使)
  • 你不必添加任何角色,没有任何用户
  • 开放这个新创建的应用程序,在“组件”单击鼠标右键,选择添加一个新的重要的决定一个
  • 选择向导检测到3个接口后,露出

这就是它来安装新组件(S)

  • 浏览到您的tlbinf32.dll位置,按“下一步”。您应该看到这样的事情:

    enter image description here

    现在你可以使用相同的客户端代码和它应该工作。请注意,性能不具有可比性(进程外与进程内)。

    您刚刚创建的代理应用程序有很多参数,您可以在以后使用相同的用户界面重新配置。您还可以编写脚本或编写代码(C#,PowerShell,VBScript等)以自动完成上述所有步骤。

  • +0

    完美,简单,**有效**和清晰!它是否适用于我需要从x64调用的所有x86本机COM DLL? – Malick

    +1

    downvoters,请详细解释 –

    +1

    @Malick - 某些DLL可能不起作用(例如,如果它们不能正确处理编组),但该原则对所有人都有效。 –

    相关问题