У меня есть класс CLR, который использует атрибут Attribute StructLayout:
[StructLayout(LayoutKind::Explicit)]
public ref class Matrix4 : System::ComponentModel::INotifyPropertyChanged
Все поля используют атрибут FieldOffset. Теперь мне нужно добавить событие, в частности, я хочу добавить интерфейс INotifyPropertyChanged и, следовательно, мне нужно
[FieldOffset(16*sizeof(Real))]
virtual event System::ComponentModel::PropertyChangedEventHandler^ PropertyChanged;
событие. Компилятор говорит мне, что мне нужно назначить атрибут FieldOffset этому событию, но после этого компилятор выдает сообщение об ошибке:
Error 34 error C1093: API call 'DefineCustomAttribute' failed '0x801311c0'
Мне не разрешено менять StructLayout на Sequential, как мне решить эту проблему?
Буду признателен за любую помощь,
Бест, апо.
решено путем разделения:
protected:
[field:FieldOffset(16*sizeof(Real))]
System::ComponentModel::PropertyChangedEventHandler^ _pc;
public:
virtual event System::ComponentModel::PropertyChangedEventHandler^ PropertyChanged
{
void add(System::ComponentModel::PropertyChangedEventHandler^ p)
{
_pc += p;
}
void remove(System::ComponentModel::PropertyChangedEventHandler^ p)
{
_pc -= p;
}
void raise(Object ^sender, System::ComponentModel::PropertyChangedEventArgs ^ args)
{
_pc->Invoke(sender, args);
}
};
void OnPropertyChanged(String^ info)
{
PropertyChanged(this, gcnew System::ComponentModel::PropertyChangedEventArgs(info));
}