【问题标题】:Managed C++ Method naming托管 C++ 方法命名
【发布时间】:2025-12-29 22:35:12
【问题描述】:

我正在使用托管 c++ 来实现一个返回字符串的方法。我使用以下签名在头文件中声明该方法:

String^ GetWindowText()

但是,当我在 C# 中使用此方法时,签名是:

string GetWindowTextW();

如何去掉方法名末尾多余的“W”?

【问题讨论】:

    标签: .net windows c++-cli


    【解决方案1】:

    要绕过 Windows 头文件的预处理程序,请像这样声明它:

    #undef GetWindowText
    String^ GetWindowText()
    

    请注意,如果您在代码中实际使用 Win32 或 MFC GetWindowText() 例程,则需要重新定义宏或将它们称为 GetWindowTextW()

    【讨论】:

    • 啊,现在我明白了。问题是我正在使用将 GetWindowText() 重新定义为 GetWindowTextA() 的头文件。我完全错过了。谢谢!
    【解决方案2】:

    GetWindowText 是一个 win32 api 调用,在您的 C++ 项目中通过宏别名为 GetWindowTextW。

    尝试将#undef GetWindowText 添加到您的 C++ 项目中。

    【讨论】:

      【解决方案3】:

      不是托管 c++,而是用于 .net 平台的 C++/CLI。一组 Microsoft 对 C++ 的扩展,用于他们的 .Net 系统。

      Bjarne Stroustrup 的常见问题解答http://www.research.att.com/~bs/bs_faq.html#CppCLI

      C++/CLI 不是 C++,不要这样标记它。发送

      【讨论】:

      • 虽然这个问题也适用于“老式”C++,但它只是以不同的方式表现出来(尝试从 dll 中导出一个名为 GetWindowText 的函数并通过 C 接口调用它。)