Visual C ++ .NET с использованием библиотеки C #. Нужна помощь? - PullRequest
0 голосов
/ 06 июля 2011

У меня есть библиотека, написанная моим другом на 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: «соединение»: глобальная или статическая переменная может не иметь управляемого типа «ONEAPI :: Connection» Visual Studio 2010 \ Projects \ 1hubBot \ 1hubBot \ 1hubBot.cpp 10 1 1hubBot

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Вы не можете использовать управляемый тип («Соединение») внутри статического или глобального - он должен существовать внутри ref class или как локальный. Это требование C ++ / CLI.

Вам нужно будет поместить свой код в управляемый класс и использовать его там. Я рекомендую пройти C ++ / CLI Tutorial , поскольку это объяснит это довольно быстро.

0 голосов
/ 06 июля 2011

Вы не можете иметь управляемые типы в глобальной или файловой области.Оберните объект 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(...);
    }
}
...