提问人:flydream 提问时间:11/14/2023 最后编辑:Filburtflydream 更新时间:11/14/2023 访问量:85
如何将 c++ 类转换为托管类?
How to convert c++ class to managed class?
问:
我想使用此url:https://devblogs.microsoft.com/cppblog/inheriting-from-a-native-c-class-in-c/ 中的方法将c++类更改为c#托管类,但它无法在构造函数中工作。 类是这样的:
class memoryTest
{
public:
std::shared_ptr<void> object_ptr;
std::deque<std::vector<int>> prev_vec_deque;
std::string _cfg, _weight;
int cur_id;
float nms;
bool wait_stream;
};
to:[C# 托管类]
public unsafe struct __CClass
{
//IntPtr* _vtable;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x2)]
IntPtr[] shared_ptr_0;
[MarshalAs(UnmanagedType.Struct, SizeConst = 0x5)]
List<bbox_t[]> tracking_id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x28)]
public byte[] portText1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x28)]
public byte[] portText2;
int cur_id;
float nms;
bool wait_stream;
};
我看过X64asm代码,用指针来保持空格,然后构造,c++函数可以在其中分配结构,但是出了点问题。 问题在于:如何转换 deque 和 shared_ptr?
_cpp = (__CClass*)Marshal.AllocHGlobal((IntPtr)(sizeof(__CClass) ));
RtlZeroMemory((IntPtr)_cpp, (UIntPtr)sizeof(__CClass));
//Call constructor _CClass_Constructor(_cpp, configurationFilename, weightsFilename, 0, 1);
System.Runtime.InteropServices.MarshalDirectiveException:“无法封送'参数 #1':指针无法引用封送结构。请改用 ByRef。
答: 暂无答案
评论
std::