2010-04-06 3 views
0
public value struct ListOfWindows 
{ 
HWND hWindow; 
int winID; 
String^ capName; 
}; 

вот моя структура теперь я создал массив из них:Массив CLI структур

array<ListOfWindows ^>^MyArray = gcnew array<ListOfWindows ^>(5); 

сейчас, чтобы проверить, работает ли я сделал простую функцию:

void AddStruct() 
{ 
    HWND temp = ::FindWindow(NULL, "Test"); 
    if(temp == NULL) return; 
    MyArray[0]->hWindow = temp; // debug time error.. 

    return; 
} 

ОШИБКА: An unhandled exception of type 'System.NullReferenceException' occurred in Window.exe

Additional information: Object reference not set to an instance of an object. 

dont know what to d o .. kinda новый для CLI поэтому если вы можете помочь пожалуйста .. спасибо.

+0

вы не выделяют элементы массива, вы просто выделить массив –

ответ

0

Ну, у вас есть массив ссылок на объекты, но я не вижу никакого кода, который фактически помещает объект в любой из них. Прежде чем обращаться к MyArray[0], вы можете захотеть поместить объект в массив в позиции 0.

Я бы изменил ListOfWindows как класс ref - в вашем контексте это не имеет смысла использовать его как класс ценности - и то вы можете добавить объект в массив, как это:

MyArray[0] = gcnew ListOfWindows; 

(непроверенные, но это более или менее, как он должен работать). Как только вы на самом деле добавили этот объект, вы сможете взаимодействовать с ним.

+0

, что вы подразумеваете под кладя в objent в массив, как это? MyArray [0] = gcnew ListOfWindows ^; ?? – Nitroglycerin

+0

@ Нитроглицерин - см. Выше расширенный ответ. –

0

Сначала вы создаете массив ссылок, а не массив значений, так как @ timo-geusch говорит, что вам нужно создать эти объекты после создания массива ссылок.

Однако вы также можете создать массив значений, подобных этому.

array<ListOfWindows>^ MyArray = gcnew array<ListOfWindows>(5); 

Тогда вы получите доступ к этим значениям с помощью. оператор вместо оператора ->, как это.

void AddStruct() 
{ 
    HWND temp = ::FindWindow(NULL, "Test"); 
    if(temp == NULL) return; 
    MyArray[0].hWindow = temp; // << here you access the value type, not the reference 
    return; 
} 

Надежда, что помогает

Смежные вопросы