unmanaged var作为托管类c ++的成员

Luk*_*uke 5 mixed-mode c++-cli class declaration

我是.net c ++的新手,并试图创建类看起来像:

public ref class Klient
{
public:
    Klient(){}
    // zmienne
    static DWORD klienty[41][2];
    static int i = 1;
    static DWORD* pid;
    static HANDLE* handle;

    //funkcje
};
Run Code Online (Sandbox Code Playgroud)

但是MSV说:

error C4368: cannot define 'klienty' as a member of managed 'Klient': mixed types are not supported
Run Code Online (Sandbox Code Playgroud)

这段代码出了什么问题?

Dav*_*Yaw 11

你可以有.NET的基本数据类型的托管类的成员(静态INT I),或指向任何非托管(DWORD*PID,HANDLE*手柄),但你不能直接拥有的非托管对象,以及为此目的,整数数组计为非托管对象.

由于此处唯一提供问题的项目是非托管阵列,因此您可以将其切换到托管阵列.

public ref class Klient
{
public:
    Klient(){}
    // zmienne
    static array<DWORD,2>^ klienty = gcnew array<DWORD,2>(41,2);
    static int i = 1;
    static DWORD* pid;
    static HANDLE* handle;

    //funkcje
};
Run Code Online (Sandbox Code Playgroud)

或者,您可以声明一个非托管类,在其中放置您需要的任何内容,并从托管类中获取指向它的指针.(如果在非静态上下文中执行此操作,请不要忘记从终结器中删除非托管内存.)

public class HolderOfUnmanagedStuff
{
public:
    DWORD klienty[41][2];
    int i;
    DWORD* pid;
    HANDLE* handle;

    HolderOfUnmanagedStuff()
    {
        i = 1;
    }
};

public ref class Klient
{
public:
    Klient(){}
    // zmienne
    static HolderOfUnmanagedStuff* unmanagedStuff = new HolderOfUnmanagedStuff();

    //funkcje
};
Run Code Online (Sandbox Code Playgroud)