【发布时间】:2023-03-03 11:51:01
【问题描述】:
我想构建一个 DLL 类库,使用 COM 互操作,使用 C#,以任何 CPU 为目标,并将其注册为 32 位和 64 位接口。
我希望能够在运行时显示所使用的接口 - 如果我使用的是 32 位版本或 64 位版本。
有什么想法吗?
【问题讨论】:
标签: c# interop x86 64-bit regsvr32
我想构建一个 DLL 类库,使用 COM 互操作,使用 C#,以任何 CPU 为目标,并将其注册为 32 位和 64 位接口。
我希望能够在运行时显示所使用的接口 - 如果我使用的是 32 位版本或 64 位版本。
有什么想法吗?
【问题讨论】:
标签: c# interop x86 64-bit regsvr32
为了让进程加载 32 位 DLL,该进程必须是 32 位的。对于 64 位也是如此。所以要找出加载了什么,假设它已经工作了,你只需要找出 CLR 的位数:
if (System.IntPtr.Size == 8)
{
// 64-bit
}
else
{
// 32-bit
}
PS。有关是否需要检查 16 大小的讨论,请参阅my answer to this question。
【讨论】:
再一次,在 win64 上运行的 32 位进程呢?
https://stackoverflow.com/a/3461562/1498669
如果您使用的是 .Net 4.0,它是当前流程的单线:
Environment.Is64BitProcess
http://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess.aspx
【讨论】: