tlbinf32.dll在一个64位的.Net应用程序中
这个(旧)COM DLL似乎没有64位版本的tlbinf32.dll
,用于提取COM组件的信息。 (见SO answer)tlbinf32.dll在一个64位的.Net应用程序中
我需要从64位C#应用程序访问它。 我没有设法将其托管到单独的代理过程中,我仍然获得例外REGDB_E_CLASSNOTREG
。我的代码适用于x86平台,但我必须为64位实现它。
任何人都可以通过一步一步的过程帮助我将其启动到代孕项目(Dllhost
) - 或者可能是另一种使用它的方法吗?
你知道一个更好的替代方法来浏览槽的本机COM Dll的所有方法类吗?
- 打开Windows的‘组件服务’
- 开放节点,以‘我的电脑/ COM +应用’
- 单击鼠标右键,选择添加新的应用程序
- 选择一个‘空的应用程序’,名称它的“tlbinf”例如
- 请确保您选择“服务器应用程序”(意思是它的代理向导将很好地帮助您创建)
- 选择您希望服务器应用程序运行的用户为(为了测试你可以选择Ë交互式用户,但这是使)
- 你不必添加任何角色,没有任何用户
- 开放这个新创建的应用程序,在“组件”单击鼠标右键,选择添加一个新的重要的决定一个
- 选择向导检测到3个接口后,露出
这就是它来安装新组件(S)
现在你可以使用相同的客户端代码和它应该工作。请注意,性能不具有可比性(进程外与进程内)。
您刚刚创建的代理应用程序有很多参数,您可以在以后使用相同的用户界面重新配置。您还可以编写脚本或编写代码(C#,PowerShell,VBScript等)以自动完成上述所有步骤。
完美,简单,**有效**和清晰!它是否适用于我需要从x64调用的所有x86本机COM DLL? – Malick
downvoters,请详细解释 –
@Malick - 某些DLL可能不起作用(例如,如果它们不能正确处理编组),但该原则对所有人都有效。 –
这是不是很清楚你期望任何人在这里做什么。找到替代品并不困难,所有这些接口都可以在System.Runtime.InteropServices.ComTypes命名空间的.NET中使用。你需要的唯一额外的东西是[LoadTypeLib()的pinvoke声明](http://pinvoke.net/default.aspx/oleaut32/LoadTypeLib.html)。 –
我试图动态地发现COM DLL的方法,参数,枚举类。 'tlbinf32.dll'对此非常方便(请参阅上面提到的SO答案),System.Runtime.InteropServices.ComTypes命名空间semms更麻烦,因为我需要通过所有IDispatch并使用需要的IntPtr被编组。 – Malick
@Hans对不起,链接到tlbinf32.dll的API是错误的,我删除它。 – Malick