运行时C#知道是否正在使用32位或64位版本的COM接口

时间:2008-12-16 17:25:16

标签: c# interop x86 64-bit regsvr32

我想构建一个DLL类库,使用COM Interop,使用C#,目标ANY CPU,并将其注册为32位和64位接口。

我希望能够在运行时显示使用的接口 - 如果我使用的是32位版本或64位版本。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

为了使进程加载32位DLL,进程必须是32位。对于64位也一样。因此,要找出已经加载的内容,假设它已经有效,您只需要找出CLR的位数:

if (System.IntPtr.Size == 8)
{
    // 64-bit
}
else
{
    // 32-bit
}

PS。有关是否需要检查大小为16的讨论,请参阅my answer to this question

答案 1 :(得分:0)

再次,在win64上运行的32位进程怎么办?

https://stackoverflow.com/a/3461562/1498669

如果您使用的是.Net 4.0,那么它就是当前流程的单行代码:

Environment.Is64BitProcess

http://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess.aspx