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

时间:2014-02-28 10:30:55

标签: c++ enums c++-cli native managed

以下是该方案:

我有WSCF Blue生成的C#Web服务客户端,我必须从C调用。我使用C ++ CLI“bridge”。在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。

谢谢&最好的祝福! -matti

1 个答案:

答案 0 :(得分:2)

我认为#define比命名空间更像问题。在使用它的代码之前尝试#undef S_OK