我从codeProject 下载了一段代码.
#if
预处理器指令似乎没有像我预期的那样工作。
我在我的项目>>属性>>构建选项卡>>条件编译符号中没有定义DSHOWNET(对话框为空)
在下面的代码中,构建项目时显示错误找不到DShowNET。由于 DSHOWNET 从未被定义,我很惊讶甚至处理了“使用 DShowNET”。
using System;
using System.Collections;
using System.Runtime.InteropServices;
#if DSHOWNET
using DShowNET;
using DShowNET.Device;
#else
#if VS2003
#else
using System.Runtime.InteropServices.ComTypes;
#endif
using DirectShowLib;
#endif
#if 预处理器指令是否适用于 Visual Studio Express 版本? DSHOWNET 是否需要明确“未定义”?还是我遗漏了其他一些基本概念?
最佳答案
我下载了示例抓取器项目并将其放在我的系统上。 (我使用的是 Enterprise VS。)我打开了 CaptureTest-2005
解决方案,将其转换为 VS2010 解决方案并加载了它。加载 CaptureTest-2005
解决方案后,我仍然看到与您所见问题相同的文件。
所以,我发现,尽管 CaptureTest-2005
项目在构建页面上没有定义 DSHOWNET
,但是 DirectX.Capture-2005
项目做到了。因此,对于 DirectX.Capture-2005
中的所有文件,DSHOWNET
指令评估为 true,因此 #if DSHOWNET
中的项目正在处理指令。
我不确定该解决方案是否只需要您构建和使用 CodeProject 下载的 DSHOWNET
部分,(例如,我不确定是否 DirectX.Capture
是必需的)但我想,由于 DirectX.Capture
项目定义了它,您将必须构建并使用该程序集来运行该项目。 (可能有解决方法,我还没有深入研究。我建议您查看项目页面,看看是否有关于什么取决于什么的信息。)
希望这对您有所帮助!
关于Visual Studio 2010 Express 中忽略了 C# 预处理器指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061528/