如何在 Visual C++ 中将托管变量用作全局变量?

Posted

技术标签:

【中文标题】如何在 Visual C++ 中将托管变量用作全局变量?【英文标题】:How to use managed variable as global in Visual C++? 【发布时间】:2014-05-29 19:42:29 【问题描述】:

我正在用 Visual C++ 编写 MFC 应用程序并使用一个 C# 库。 Dou to I 结合了非托管和托管的类和变量。我需要一些来自 C# 的托管类 put 和 read to/from global scope 可以从整个应用程序访问。我试过了(简单的例子):

App.h:
    class MyClass1 
        public:
            gcroot<Namespace::Something^> var;
        ;

    class MyClass2 
        public:
            static gcroot<Namespace::Something^> var;
        ;

    extern MyClass1 *cl1;

App.cpp
    MyClass1 *cl1 = new MyClass1();

当我使用“cl1->var”时,我得到 System.NullReferenceException,MyClass2 返回错误

error LNK2020: unresolved token (0A0003BE) "public: static struct gcroot ...
error LNK2001: unresolved external symbol "public: static struct gcroot ...

请帮助我,如何在整个应用程序中使用“Something^ var”?

【问题讨论】:

【参考方案1】:

与任何其他 c++ 静态成员一样,除了声明它之外,您还需要定义它。所以在命名空间范围内的 App.cpp 中,你需要:

gcroot<Namespace::Something^> MyClass2::var;

【讨论】:

以上是关于如何在 Visual C++ 中将托管变量用作全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 调试器中查看命名空间的全局变量?

在Visual Studio 2010中将Native / C ++ DLL链接到托管C ++ / CLI包装器

QLibrary Visual C++ 全局变量

C++,Visual Studio 2017:从加载的 .dll 中访问 .exe 的全局变量 [重复]

如何在 Visual C++ 中将字节数组转换为十六进制字符串?

如何在 Visual Studio 2013/2015 中将 Visual C++ 再分配文件 (.dll) 重新分配到我的应用程序