如何在非托管 C++ 中使用 C++ CLR 中定义的结构?
How to use a struct defined in C++ CLR in unmanaged C++?
我在 Managed.h
中定义了一个结构,我希望能够在另一个非托管 C++ 项目中使用它(我们称之为 Unmanaged.h
)。
我尝试引用 dll,几个不同的 #include
s,但我无法让它工作。有没有简单的方法可以做到这一点?
供参考:我是 C++ 编程的新手(我通常使用 C#),我使用 Visual Studio 2015.
查看一些代码和您看到的错误消息会很有用。但作为一个基本示例:
- 包含该结构的 CLR 文件。称之为 MyStruct.h:
using namespace System;
namespace ManagedNameSpace {
public value struct MyStruct {
void f() {
System::Console::WriteLine("test");
}
};
}
- 非托管 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()
我在 Managed.h
中定义了一个结构,我希望能够在另一个非托管 C++ 项目中使用它(我们称之为 Unmanaged.h
)。
我尝试引用 dll,几个不同的 #include
s,但我无法让它工作。有没有简单的方法可以做到这一点?
供参考:我是 C++ 编程的新手(我通常使用 C#),我使用 Visual Studio 2015.
查看一些代码和您看到的错误消息会很有用。但作为一个基本示例:
- 包含该结构的 CLR 文件。称之为 MyStruct.h:
using namespace System;
namespace ManagedNameSpace {
public value struct MyStruct {
void f() {
System::Console::WriteLine("test");
}
};
}
- 非托管 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()