Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2012, 12:07   #1
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
Восклицание Acess violation+invalid pointer operation

после добавления кода который передает строки назад в окно программы начала вылетать после третьего срабатывания или 2+ несколько времени.

а как два раза нормально передает строки а потом что случается?

Код:
procedure SnapShoot();
var
  BufBmp: TBitmap;
  BufJpg: TJPEGImage;
  DesktopPath: String;
  Counter: Integer;
var DataStruct : CopyDataStruct;
  pNomo,LastSaved: String;
begin
  // ïðîâåðÿåì, åñòü ëè â áóôåðå îáìåíà êàðòèíêà
  if Clipboard.HasFormat(CF_BITMAP) then
  begin
  DataStruct.lpData:=pchar('');
        BufBmp := TBitmap.Create;
    BufJpg := TJPEGImage.Create;
    BufBmp.LoadFromClipboardFormat(CF_BITMAP, Clipboard.GetAsHandle(CF_BITMAP), 0);
    BufJpg.Assign(BufBmp);
    Counter := 0;
    DesktopPath := GetSystemPath('Desktop');
    while FileExists(DesktopPath +pNomo+ IntToStr(Counter) + '.jpg') do
      Inc(Counter);
      LastSaved:=DesktopPath +pNomo+ IntToStr(Counter) + '.jpg';
    BufJpg.SaveToFile(LastSaved);

  DataStruct.dwData := 0;
  DataStruct.cbData := length(lastSaved)+1;
  DataStruct.lpData := pchar(lastSaved);
      {hApp}
  SendMessage(FindWindow('TForm1','Form1') , WM_CopyData, 0 , integer(@DataStruct));
  end
  else ShowMessage('EPIC FAIL');
end;
при попытке заменить String на ShortString - Invalid Typecast

Код:
uses ShareMem,
borlndmm.dll есть в папке проэкта.
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 19.08.2012, 12:41   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не мешало бы в конец lastSaved добавить двоичный ноль и FREE выполнить для ufBmp и BufJpg
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.08.2012, 09:13   #3
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Ноль-то зачем? Обычная себе строка, не думаю, что она нультерминированная...
А вот про освобождение объектов - это да, хотя и не должны они вызывать исключения, должны приводить к простым утечкам памяти.

Ещё смущает код:
Код:
    while FileExists(DesktopPath +pNomo+ IntToStr(Counter) + '.jpg') do
      Inc(Counter);
      LastSaved:=DesktopPath +pNomo+ IntToStr(Counter) + '.jpg';
Вы уверены, что в цикле хотите просто увеличивать каунтер? Может быть стоит begin..end; сделать? Просто отступы смущают...

И ещё... Не уверен, но разве DataStruct очищать не нужно?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 21.08.2012, 14:44   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

HellMercenariess, а ты сам-то что сделал для решения проблемы? Хотя бы строчку кода нашёл?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.08.2012, 22:16   #5
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию

Добавил
Код:
uses ShareMem,
во все три файла: файл главного окна, файл библиотеки и файл проекта после чего проблема ушла почти полностью - в процессе работы ошибки не происходят, но при закрытии все же иногда в случайном порядке возникает ошибка.
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 22.08.2012, 22:23   #6
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

А почему бы не использовать WideString(BSRT)...По идее проблем не должно быть, т.к. память система выделят для под эти строки, следовательно конфликтов и с менеджерами памяти не должно быть...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid Pointer operation hon Общие вопросы Delphi 6 22.11.2011 21:59
Invalid Pointer Operation Стелс Компоненты Delphi 1 25.09.2011 21:24
Invalid pointer operation. KoBRaAndrey Общие вопросы Delphi 6 02.06.2010 17:32
Invalid Pointer Operation csander Общие вопросы Delphi 0 21.10.2009 17:44
Invalid Pointer Operation Unconnected Общие вопросы Delphi 3 21.02.2009 20:23