首页 > 解决方案 > 从托管类 C#/CLI 访问非托管静态成员(本机 C++)

问题描述

我刚开始使用 CLI。在 C++ 中,我们可以访问像 className::static_field 这样的静态成员。但是如果使用 C#/ CLI 中的非托管代码......我们如何访问它?

我阅读了一些我们需要制作 C++ 项目的 DLL 并在 CLI/C# 中使用它的地方。对于我能够使用的非静态成员,使用该过程。但是在使用静态时,我看到了这些错误......

unresolved token (0A0007CC) "public: static int unManaged::a" (?a@unManaged@@2HA)
error LNK2001: unresolved external symbol "public: static int unManaged::a" (?a@unManaged@@2HA)
fatal error LNK1120: 2 unresolved externals

示例非托管类..

class UnManaged {
int data;

static int a;
public:
UnManaged () {
    data = 0;
}
static int getStat() {
    return a;
}
static void setStat(int val) {
  a = val;
}
int getData() {
    return data;
}
void setData(int val) {
    data  = val;
}
};

我想从如下 CLI 类访问...

void Main(array<String^>^ args) {
    UnManaged s;
    UnManaged ::setStat(25); //throwing linker error
    MessageBox::Show(System::Convert::ToString(s.getData()));
    s.setData(100);
    MessageBox::Show(System::Convert::ToString(s.getData()));
}

标签: c#c++visual-studioclr

解决方案


推荐阅读