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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2013, 20:27   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
Вопрос Access violation at adress

Доброе время суток!
У меня вот такая проблемам!
Код:
Код:
function DosToWin(St: string): string;  stdcall;
var
  Ch: PChar;
begin
  Ch := StrAlloc(Length(St) + 1);
  OemToAnsi(PChar(St), Ch);
  Result := Ch;
  StrDispose(Ch)
end;   exports DosToWin;

Function WinToDos(const S: string):string;  stdcall;
var
  NewStr: string;
begin
  SetLength(NewStr, Length(S));
  Windows.CharToOem(PChar(S), PChar(NewStr));
  result:=NewStr;
end;
exports WinToDos;
из программы:

Код:
Function WinToDos(const S: string):string;  stdcall;
external 'DBDLL\DBDLL.dll' name 'WinToDos';

procedure TForm1.Button1Click(Sender: TObject);
var
re:integer;
ge:TStringList;
begin
ge:=TStringList.Create;
   for re:=1 to RichEdit1.Lines.Count -1 do
  begin
ge.Add(WinToDos(RichEdit1.Lines.Strings[re]));
ge.SaveToFile('1234.txt');
end;
end;
текст в RichEdit:

Код:
Смета
Дата:
15.02.2013
Заказ №1
Заказчик: Д.Н.Куклин 
Телефон: 
89853615250 
89266765889 

Расчет стоимости услуг электрика
______________________________________________________
Вид работ                                                      Цена на работы                 Количество                 Сумма
______________________________________________________
 
Высверливание отверстий под установочную
коробку в гипсокартоне, гипсолите.                         200 шт.                          6                          1200
_____________________________________________________________________________________
Установка механизма розетки, выключателя,
декоративной накладки.                                           250 шт.                         6                          1500
_____________________________________________________________________________________
Установка розетки накладной.                                 400 шт.                         2                          800
_____________________________________________________________________________________
Установка звонка электрического
с подключением.                                                      400 шт.                         1                          400
_____________________________________________________________________________________
Замена электроблока тройного (санузел).               1200 шт.                         1                         1200
_____________________________________________________________________________________
Прокладка проводки открытой на скобах
на гипсолитовых стенах.                                           100 ПМ                         30                         3000
_____________________________________________________________________________________
Штробление стен кирпичных под провод.                   220 ПМ                         50                         11000
_____________________________________________________________________________________
Установка автомата электрического.                        450 ШТ                         16                         7200
Вот до сюда ок:
Цитата:
Дата:
15.02.2013
Заказ №1
Заказчик: Д.Н.Куклин
Телефон:
89853615250
89266765889
Далее ошибка и всё) Access violation at adress
Помогите пожалуйста !
За рание благодарен!
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Stilet; 18.02.2013 в 21:07.
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 21:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

sharemem в ДЛЛке присутствует в списке модулей?
Кстати зачем простую функцию конвертирования оборачивать в еще одну? Далее подразумевается какая-то особая работа со сконвертированной строкой внутри ДЛЛ?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2013, 21:24   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

sharemem присутствует и в дпр программы присутствует.
Я и местами модули менял в длл ке, как то мне это помогло)
не пойму пока в чём дело, треть сохраняет и процесс стопед)))
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 21:28   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Использовать TEncoding?
Человек_Борща вне форума Ответить с цитированием
Старый 18.02.2013, 21:33   #5
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

У меня этого класса нет я на 7ой Delphi а TEncoding вроде с 2009 версии появился или нет?
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 21:44   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

угу. WideString вместо String и ShareMem убрать. И в exports имена функций на экспорт можно через запятую указывать.
Человек_Борща вне форума Ответить с цитированием
Старый 18.02.2013, 21:52   #7
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Теперь
))) out of memory
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 22:23   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чесслово я бы в ДЛЛ такое не пихал если бы не веские обстоятльства...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2013, 22:39   #9
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

))Я бы тоже)) но попросили именно так чтоб именно эти функции вызывались из длл-ки !
Это не мой каприз)))
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 19.02.2013, 10:27   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но попросили именно так чтоб именно эти функции вызывались из длл-ки !
а зачем?!!! Это именно "каприз"!! (и неважно, чей..)

попробуйте такую функцию вместо вашей WinToDos
Код:
function StrToOem(const AnsiStr: AnsiString): AnsiString;
begin
  SetLength(Result, Length(AnsiStr));
  if Length(Result) > 0 then
    CharToOemBuff(PChar(AnsiStr), PChar(Result), Length(Result));
end;
это раз.

во-вторых, возьмите себе за правило - если Вы создали объект (я про ge:=TStringList.Create,
так будьте любезны и удалить его, освободив занимаемую память!
Либо через ge.Free; либо через FreeAndNil( ge );

в третьих, ВЫНЕСИТЕ СОХРАНЕНИЕ В ФАЙЛ ЗА ЦИКЛ!!!!!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  re:integer;
  ge:TStringList;
begin
  ge:=TStringList.Create;
  for re:= 0 to RichEdit1.Lines.Count -1 do
     if  Length(RichEdit1.Lines.Strings[re])>0 then
           ge.Add(WinToDos(RichEdit1.Lines.Strings[re])) 
     else  
           ge.Add('');

  ge.SaveToFile('1234.txt');
  FreeAndNil(ge);
end;

p.s. если уж так нужно именно ваши функции вызывать, тогда, по крайней мере, не вызывайте их для пустых строк!

Последний раз редактировалось Serge_Bliznykov; 19.02.2013 в 10:32.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
access violation at address 00457119 in module 'project1.exe'. read of adress 000000E0 Александра_69 Общие вопросы Delphi 9 29.10.2011 17:22
Access violation at adress... eatlant Общие вопросы Delphi 4 12.04.2011 12:34
Ошибка access violation at adress Godod Помощь студентам 2 02.02.2011 11:11
Получаю ошибку Access violation at adress fs444 Общие вопросы C/C++ 9 16.12.2009 08:04