使用C#库的Visual C ++ .NET。需要帮忙?

时间:2011-07-06 19:40:35

标签: c# .net visual-c++

我有一个朋友用C#编写的库,我需要在C ++ .NET中使用它。我是VC ++ .NET的新手,我不知道如何声明我的类,所以它可以被我文件中的所有函数使用..这是我的代码..

using namespace System;
using namespace ONEAPI;
namespace Bot{

    void InitializeBot();
    ONEAPI::Connection connection(true);
    int main(array<System::String ^> ^args)
    {
        Console::BackgroundColor = ConsoleColor::Black;
        InitializeBot();
        return 0;
    }
    void InitializeBot(){
        connection.StartConnection("127.0.0.1", 1274, "username",
            "B73955EE7A30E959819BAE2392F6F4441DF98C66A4026EF55287A81D1F815504",
            "R0Bo");
    }
}

我收到此错误:

  

错误1错误C3145:'connection':全局或静态变量可能没有托管类型'ONEAPI :: Connection'Visual Studio 2010 \ Projects \ 1hubBot \ 1hubBot \ 1hubBot.cpp 10 1 1hubBot

2 个答案:

答案 0 :(得分:2)

您不能在静态或全局范围内使用托管类型(“连接”) - 它必须存在于ref class内或作为本地。这是C ++ / CLI的要求。

您需要将代码放入托管类,并在那里使用它。我建议通过C++/CLI Tutorial,因为它会很快解释这个。

答案 1 :(得分:-1)

您不能在全局或文件范围内拥有托管类型。将Connection对象包装在非托管(常规C ++样式)类中,并创建一个全局实例。

编辑:在查找适当的编译器mumbo-jumbo之后,这就是我想出的:

#include <vcclr.h>
using namespace System;
using namespace ONEAPI;

namespace Bot {
    class ConnectionWrapper {
    public:
        static gcroot<ONEAPI::Connection^> connection;
    };

    gcroot<ONEAPI::Connection^> ConnectionWrapper::connection = gcnew Connection(true);

    void InitializeBot() {
        ConnectionWrapper::connection->StartConnection(...);
    }
}