首页 / 知识

关于c#:如何在运行时后期绑定32位/64位库

2023-04-12 21:26:00

关于c#:如何在运行时后期绑定32位/64位库

How to late bind 32bit/64 bit libs at runtime

我遇到了一个与此处描述的问题相似但略有不同的问题(加载程序集及其依赖项)。

我有一个用于 3D 渲染的 C DLL,这是我们卖给客户的。对于 .NET 用户,我们将有一个 CLR package器。 C DLL 可以在 32 位和 64 位版本中构建,但我认为这意味着我们需要有两个 CLR package器,因为 CLR 绑定到特定的 DLL?

假设现在我们的客户有一个可以是 32 位或 64 位的 .NET 应用程序,并且它是一个纯 .NET 应用程序,它让 CLR 从一组程序集中解决它。问题是应用程序代码如何在运行时动态选择我们的 32 位和 64 位 CLR/DLL 组合?

更具体地说,上述问题的建议答案是否也适用于此处(即创建 ResolveEvent 处理程序)?


我终于找到了一个可行的答案。

同时编译 32


大约一年前我能够做到这一点,但我不再记得所有细节了。基本上,您可以使用 IntPtr.Size 来确定要加载哪个 DLL,然后通过 p/Invoke 执行实际的 LoadLibrary。此时,您已经在内存中获得了模块,并且您应该能够从其中 p/Invoke 函数——不应再次重新加载相同的模块名称。

不过,我认为,在我的应用程序中,我实际上让 C DLL 将自己注册为 COM 服务器,然后通过生成的 .NET package器访问它的功能——所以我不知道我是否曾经测试过 p/直接调用。


不久前我遇到了类似的情况。我使用的工具包在 64 位环境中表现不佳,我无法找到动态强制程序集绑定为 32 位的方法。

可以强制您的程序集在 32 位模式下工作,但这需要修补 CLR 标头(在框架中有一个工具可以做到这一点),如果您的程序集是强命名的,这将不起作用

恐怕您需要为 32 位和 64 位平台构建和发布两组二进制文件。


运行绑定加载用于

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢