Ниже приведен пример кода из файла заголовка (отсутствующие конструкторы):
class MyItem
{
// blah blah
};
class MyClass
{
public:
__property MyItem Item = {read=GetItem, write=SetItem};
private
MyItem FItem;
MyItem GetItem(void);
void SetItem(const MyItem AItem);
}
И в файле cpp:
void MyClass::SetItem(const MyItem AItem)
{
FItem = AItem;
}
Я исключил метод get, потому что он отлично работает.
По какой-то причине заданный метод не работает.
Я определенно присваиваю значение свойству в некотором тестовом коде.
Если я попытаюсь поместить точку останова в метод set, он не будет помещен, потому что код был оптимизирован, потому что он никогда не вызывается.
Если я заменю метод Set самой переменной поля, он будет записан в порядке.
Я просмотрел всю документацию, поставляемую с XE.
Я запутался до такой степени, что думаю, что это может быть ошибка компилятора.
Не имеет значения, если я передам аргументы по ссылке.
Идеи?
Решено после сна.
Я никогда не устанавливал сам класс, я устанавливал член класса, поэтому он фактически использовал метод get, а затем корректировал возвращаемое значение.
Изменение возврата на возврат по ссылке решило мою проблему.
Дело в том, что это сработало, когда я непосредственно назначил свойство полю, потому что компилятор просто подставляет поле имени свойства во время компиляции. Мое реальное приложение имеет различные поля, которые могут быть установлены в зависимости от состояния класса, следовательно, поэтому оставить его таким способом было невозможно.
Спасибо
Других решений пока нет …