Черная магия при работе со строками
Если вам дороги нервы:
Никогда не используйте в классах тип String неопределенной длины (как в примере ниже). Рано или поздно программа начнет шутить над вами. Я в этом успел убедиться. Лучшим вариантом, верным на мой взгляд для использования строковых данных в классах (равно как и в структурах), являются:
1) Zstring , Wstring с определенной длиной
2) А так же указатели на типы String, Zstring , Wstring
Не зря же в любой структуре WinAPI используется тип LPSTR или LPWSTR!
У меня было что-то типа такого:
Code
Type Mytype
one as String*1
two as string
three as string
End Type
Type MyCLASS
as Mytype Array(200)
...
...
...
End Type
В один прекрасный момент, (когда добавил новый модуль) программа, собранная на компиляторе 0.24, стала вылетать при работе, сообщая об ошибке доступа к памяти. При том вылет был на таком месте, где сделано кажется все безупречно. Более того, программа собранная на компиляторе 0.23 , работала без проблем. Я начал искать ошибку, естественно держа в голове то, что это могла быть ошибка самого компилятора. В таком положении уже не знаешь что думать. Скажу честно потратил времени не мало, при том что использовал отладчик. Только потом осенила догадка по поводу STRING. Ошибка исчезала в двух случаях:
1) Все три поля структуры с типом String я поставил определенной длины (для моего кода было неудобно, поскольку нужно было вручную приписывать ноль).
2) Заменил тип String на Zstring определенной длины (этот вариант я предпочел)
Пишу и надеюсь, что те кто прочитает не наступит на те же грабли.