如何写一个托管和非托管下都能编译成功的C++结构体,方便在不同环境下调用? 5C

不懂C++,请各位高手指点一下。
需求是需要封装一个动态库,方便C#调用C++对应结构体,该结构体也应用于静态库,代码如下:

//A.h
#ifdef DOTNET
#define TEST_STRUCT(name) [StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]\
    typedef public ref struct name
#else
#define TEST_STRUCT(name) typedef struct name
#endif
    TEST_STRUCT(A)
    {
            unsigned char Count;
            B* DataList;
            A()
            {
                    Count = 0;
                    DataList = NULL;
            }
            ~A()
            {
                    if (DataList != NULL)
                    {
                                delete [] DataList;
                                DataList = NULL;
                    }
            }       
            bool copy(char* input, unsigned long count, char* pMem, unsigned long ulMemCount)
            {
                    DataList = new B[Count];
                    memcpy(DataList, &input[6], Count*8);
                    return true;
            }
    }A
    ```
    ```

我创建了一个C++ 动态库工程
代码如下:

// TestCLI.h

#include "..\A.h"

#ifndef DOTNET
#define DOTNET;
#endif

#pragma once


然后在工程内引入A.h
编译时,

B* DataList;

会报错。
应该如何改造呢?

补充一下,之所以要引用A.h,是想着两边用一套就可以满足,因为这个库是个协议库,后续要不断的往里面补充,为了方便,想着写一个.h, 然后引入两个工程中分别编译就可以了,不需要写两套那么麻烦。
有办法实现吗?
c++

1个回答

分别在托管和非托管环境下定义两个,只要托管的类型封送是正确的两者就兼容了。
不要在结构体内使用类,定义方法、代码之类的。这些可以放在结构体外面。

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复clover82625: 非托管的写一套,托管的包装下,好比调用api函数
一年多之前 回复
clover82625
clover82625 因为这个库是个协议库,后续要不断的往里面补充,为了方便,想着写一个.h, 然后引入两个工程中分别编译就可以了,不需要写两套那么麻烦。 有办法实现吗?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐