如何避免与VSConstants.S_OK字段的命名冲突

how to avoid naming conflict with VSConstants.S_OK Field?

本文关键字:字段 冲突 OK 何避免 VSConstants      更新时间:2023-10-16

这是场景:

我有 WSCF Blue 生成的 C# Web 服务客户端,我必须从 C 调用它。我用C++ CLI"桥"来做到这一点。在 C# Web 服务客户端中,我有

namespace MyCompany.Product.ExternalPlan.Client
{
    public enum TMsgStatus
    {
        S_OK,
        //...
        E_ERROR,
    }

这很好。

C++ CLI 项目执行以下操作(这不在任何命名空间中!!

try 
{
    EPClient::Client^ client = gcnew EPClient::Client();
    m_ResponseHeader = client->CreateExternalProject(n_Project->Id, m_ProjectData,     m_NameValuePairs,    // in 
                                    m_PlanAndWorksExternal, ConvertNativeToManaged(n_UserName),         // in 
                                    m_ProjectRet, m_PlanAndWorksRet);                                   // out
}
catch (Exception ^ e)
{
    // ...
    return -1;
}
if (m_ResponseHeader->Status == MyCompany::Product::ExternalPlan::Client::TMsgStatus::S_OK)
{
    ConvertManagedToNative(n_ProjectRet, m_ProjectRet);
} 

现在,如果我将上面的 if 语句中的S_OK更改为E_ERROR就可以了。我读到C++枚举是全局的,所以我认为这就是它与这个 VS 东西混合的原因。 我对C++编程几乎一无所知。C++代码是从 C 调用的,我有类似的没有命名空间的例子。我认为这甚至无关紧要,因为我指的是具有完整命名空间的S_OK。

谢谢和最好的问候! -马蒂

我认为这更多的是#define问题而不是命名空间。在使用它的代码之前尝试#undef S_OK