Andy Belton Ответов: 2

У меня есть программа, которая не работает


Эта программа разработана под управлением Borland C++ (V4) , работающего на Win XP. Программа была разработана для работы на Win XP, Vista, 7 и 10. Он работает с включенными полными "привалегами" и прекрасно работает уже много лет. Я иногда добавляю улучшения.

Самое последнее-это отображение имени системного принтера по умолчанию. Он отлично работает на XP (не пробовал Vista), но выходит из строя на Win 7 & 10. Незаконный доступ к памяти 0000 004C.

Вот оскорбительный код:

AnsiString s_Bfr

  s_Bfr = Printer()->Printers[Printer()->PrinterIndex ].GetText();


Есть какие-нибудь мысли о том, почему?

Программа действительно печатает отчеты, я хотел, чтобы пользователь знал, какой принтер используется.

Что я уже пробовал:

Единственная инструкция-это причина. Если я это прокомментирую, никакого сбоя не будет.

KarstenK

разделите этот оператор на 5 (fixe) операторов с нулевой проверкой, чтобы убедиться, что он не рухнет. Это также помогает отладить его.

2 Ответов

Рейтинг:
2

Andy Belton

Я попробую сделать то, что вы предложили. Это может занять некоторое время, поскольку я старше Борланда. В следующем году мне исполнится 70 лет.

Спасибо за Ваш вклад
AGB


OriginalGriff

Все в порядке - мне 61 год!

Не публикуйте комментарии в качестве решений: только ОП - вы - получаете уведомление о том, что вы это сделали, а это означает, что ответчик не знает, что вы хотели говорить дальше. Вместо этого используйте команду "есть вопрос о комментарии?" кнопка под каждым решением (виджет ответа для комментариев), и плакат получает электронное письмо.

Я могу настоятельно рекомендовать перейти от Borland к Visual Studio - это намного лучше, как только вы привыкнете к современным фреймворкам, а Community Edition будет бесплатным непосредственно от Microsoft. 27-летний программного обеспечения, как правило, имеют ... проблемы... взаимодействие с современными операционными системами.

Richard MacCutchan

Вы, молодые люди ... :)

Рейтинг:
1

OriginalGriff

На первый взгляд, Win7 и 10 возвращают разные значения XP, и либо Printer() или Printers[Printer()->PrinterIndex ]возвращает null.

Разбейте строку на отдельные части как отдельные строки и используйте отладчик, чтобы точно изолировать то, что возвращается: попробуйте это на XP и Win 7/10, и вы должны увидеть различия.
Я вообще не могу это проверить - у меня больше нет XP, а Borland 4-это ... гм ... довольно устарело. Как будто он старше примерно 50% наших членов здесь! :смеяться:


Tachyonx

Это немного не по теме, но я "все еще" использую автономный ноутбук Fujitsu Siemens с Windows 2000 для сбора/воспроизведения музыкальных треков :-), это скорее совпадение или привычка ... BR