首页 > 解决方案 > FILETIME 不明确的符号(错误代码 E0266)

问题描述

我在 VS 2017 中有一个基本的 C++/CLI DLL,它定义了下面描述的包装类。项目属性设置为以 .NET 4.6.1 作为目标生成 CLR。

#include "ApiManagerWrapper.h" // very basic CLI wrapper header
#include "Handler.h" // This header is an API example that includes windows.h

using namespace System;
using namespace std;

namespace CLI
{
    ApiManager::ApiManager()
        : ManagedObject(new GXP_API::ApiManager())
    {
        Console::WriteLine("Creating a new ApiManager-wrapper object!");
    }

}

我需要重用包含自身 windows.h 的 C++ 文件(handler.h,来自 API devkit),主要是为了使用 HANDLE 和 CRITICAL_SECTION 结构。我知道这一点是因为如果我删除了 handler.h 标头中的 windows.h 包含(以及使用上述结构的大部分代码),CLI 包装器 DLL 编译得很好。

问题是 FILETIME 是在 windows.h (minwinbase.h) 包含的头文件之一和命名空间 System::Runtime::InteropServices 中定义的。该错误在 VS 2017 中报告为 E0266,并带有指向线程的链接,该线程建议使用预期的使用范围 (::FILETIME) 限定 FILETIME 的使用。然而,在这种情况下这是不可能的,因为此标头来自操作系统。我还需要使用 System 命名空间,因为它是 CLI 组装机制的基础。

如何解决这个冲突?有没有办法使用系统命名空间的给定部分?有什么方法可以指示编译器如何解决冲突?

标签: command-line-interfacesymbolsambiguousfiletime

解决方案


推荐阅读