如何在非托管 C++ 中使用 C++ CLR 中定义的结构?

How to use a struct defined in C++ CLR in unmanaged C++?

我在 Managed.h 中定义了一个结构,我希望能够在另一个非托管 C++ 项目中使用它(我们称之为 Unmanaged.h)。

我尝试引用 dll,几个不同的 #includes,但我无法让它工作。有没有简单的方法可以做到这一点?

供参考:我是 C++ 编程的新手(我通常使用 C#),我使用 Visual Studio 2015.

查看一些代码和您看到的错误消息会很有用。但作为一个基本示例:

  1. 包含该结构的 CLR 文件。称之为 MyStruct.h:

using namespace System;

namespace ManagedNameSpace {

    public value struct MyStruct {
        void f() {
            System::Console::WriteLine("test");
        }
    };
}
  1. 非托管 class 包含 CLR 结构,作为一个明确的示例,我在构造函数中调用了 object,但您可以轻松地将其移动到实现文件(记住将文件包含在header):

#include "MyStruct.h"

class UnManagedClass {
    public:
        explicit UnManagedClass() {
            ManagedNameSpace::MyStruct clrObj;
            clrObj.f();
            std::cout << "This compiles fine";
        }
};

请注意,某些 CLR 类型需要编组。例如,需要对 String 进行编组。这是将字符串转换为 LPCWSTR

的示例
LPCWSTR lpcwStr = (LPCWSTR)(Marshal::StringToHGlobalUni(clrString)).ToPointer()