【发布时间】:2016-10-12 08:35:11
【问题描述】:
如果平台目标未设置为 x86,如何生成编译器错误?
动机:一种特定的方法动态加载 32 位 COM dll。如果项目是为“x64”或“Any CPU”构建的并且在 64 位环境中运行,那么在运行时加载 COM 对象自然会失败。我想要一个编译时检查以确保这不会发生。
这旨在对项目设置进行安全检查,完全封装在需要 32 位的源文件中。所以我无法接受需要在项目设置中定义条件编译符号的解决方案(比如this)。
【问题讨论】:
-
这看起来很像 XY 问题。我建议通过 COM+ (DCOM) 在专用服务器进程中托管您的 COM 组件。这样,
dllhost进程将围绕您的组件启动,并将编组调用。由于这些是跨进程调用,因此您的 C# 项目的位数将不再重要。 -
@FrédéricHamidi 感谢您的建议。这是我想避免的——在 64 位上运行它没有任何优势。
-
您可以按照here 的讨论评估 IntPtr.Size。
-
@AxelKemper 我不认为 IntPtr.Size 可以在编译时进行评估。
标签: c#