6

私は.netc++の初心者で、次のようなクラスを作成しようとしています。

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

    //funkcje
};

しかし、MSVは次のように述べています。

error C4368: cannot define 'klienty' as a member of managed 'Klient': mixed types are not supported

このコードの何が問題になっていますか?

4

1 に答える 1

12

管理対象クラスのメンバーとして.NET基本データ型(static 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
};

または、アンマネージクラスを宣言し、必要なものをそこに配置して、マネージクラスからそのクラスへのポインターを設定することもできます。(非静的コンテキストでこれを行う場合は、ファイナライザーからアンマネージメモリを削除することを忘れないでください。)

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
};
于 2012-07-21T00:34:19.080 に答える