我有一个朋友用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
答案 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(...);
}
}