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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2023, 02:17   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию Работа с dll

Добра всем!!!
Прошу помощи
Ситуация такая:
Программа работает, работает, работает и бац ошибка(
error.jpg
Ковырялся так и не понял, вроде всё норм.
Вот фрагмент кода dll:
Код:
uses
  SysUtils,Messages,Windows,CRCunit;
 
procedure ProcessMessages;
var
  Msg: TMsg;
begin
  while true do
  begin
    if not PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then Break;
    if Msg.Message <> WM_QUIT then
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
  end;
end;

function get_param(bg,ed:string;rep:string):string;//ïîëó÷åíèå ïàðàìåòðîâ
var i:integer;
begin
i:=pos(bg,rep);
if i<>0 then begin
             i:=i+length(bg)-1;
             delete(rep,1,i);
             get_param:=copy(rep,1,pos(ed,rep)-1);
             end
        else get_param:='';
end;

function TranslationTruFals(FilePatch:string; str:string): string;
var ff:textfile;
s1,s2:string;
begin
assignfile(ff,FilePatch); 
{$I-}
reset(ff);
{$I+}
if ioresult<>0 then begin
                     exit;
                    end;
repeat
ProcessMessages;
 readln(ff,s1);
   s2:=copy(s1,1,pos('=',s1)-1);
     if s2=str then
   result:= get_param('"','"',s1);
 until eof(ff);
closefile(ff);
end;  exports TranslationTruFals;
end.
Вот exe:

Код:
implementation

  function TranslationTruFals(FilePatch:string; str:string): string;  external 'Recollection.dll';

procedure TForm1.ComboBox4Change(Sender: TObject);
begin
Memo1.Lines.Add(TranslationTruFals('Replacement.ini',ComboBox4.Text));

end;

end.
Вот Replacement.ini
Replacement.txt
В ComboBox-се

Код:
Дом Атрейдес
Дом Ордос
Дом Хaрконнен
Дом Икс
Дом Тлейлаксу
Дом Фремен
Дом Императора
Дом гильдии
Случайный Дом
Если поигратся выбирая минуту примерно вылетает эта ошибка(
Как исправить не пойму(
И ещё при закрытии программы
Она то есть программа остаётся открытой Форма закрывается а процесс нет, так и висит в диспетчере задач(
Зарание благодарен!
С уважением!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Volkogriz; 19.04.2023 в 02:27.
Volkogriz вне форума Ответить с цитированием
Старый 19.04.2023, 05:40   #2
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Пробую так:
Код:
procedure StringListToCreate(FilePatch:string);
BEGIN
  ttr:=TStringList.Create;
     ttr.LoadFromFile(FilePatch);
end;    exports StringListToCreate;

procedure StringListToFree;
BEGIN
   ttr.Free;
end;   exports StringListToFree;

function TranslationTruFals(str:string): string;
var
s1,s2:string;
i:integer;
begin
for i := 0 to ttr.Count-1 do
begin
s1:= ttr[i];
s2:=copy(s1,1,pos('=',s1)-1);
if s2=str then 
TranslationTruFals:= get_param('"','"',s1);
if s2=str then  break;
end;
end;
exports TranslationTruFals;
Тоже ошибка(
error2.jpg
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 19.04.2023, 06:17   #3
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Нельзя в функцию ДЛЛ передавать паскалевы строки. Только PChar.
jillitil вне форума Ответить с цитированием
Старый 19.04.2023, 06:44   #4
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

jillitil Спасибо огромное!!!
Прочёл и сразу вспомнил об этом))) честно, у меня лет 7 назад такая же ситуация была))
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 19.04.2023, 18:23   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Попробуйте еще с WideString
http://forum.vingrad.ru/index.php?sh...post&p=1047372 (при использовании WideString, используется не обычный менеджер памяти, а специальный - системный...)
https://forum.sources.ru/index.php?showtopic=210450 (Передавать WideString. Очень простой вариант, работать с WideString так же просто, как и со String, за памятью следить не нужно, она автоматически выделяется и освобождается. Однако при работе с этим типом дельфийский менеджер памяти не используется, используются системные функции...)
http://www.cyberguru.ru/programming/...s.html?start=7 (... Следует также упомянуть о ещё одной альтернативе передачи строк в DLL - типе WideString. Этот тип хранит строку в кодировке Unicode и является, по сути, обёрткой над системным типом BSTR. Работать с WideString так же просто...)
Alter вне форума Ответить с цитированием
Старый 21.04.2023, 06:51   #6
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

это что за фамильные дома из книги "Дюна"?
игрушку свою делаете?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторная работа(очень простая) Структуры, работа с файлами yurda Фриланс 2 11.06.2016 08:44
Работа с ems api: корректная работа только при явном указании города mrdemkin JavaScript, Ajax 3 02.03.2015 18:23
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00