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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2012, 16:23   #1
Abrokadawr
 
Регистрация: 03.11.2011
Сообщений: 8
По умолчанию Почему вылезает исключение и как от него избавиться?

Вот текст DLL:

Код:
library Project1;

uses
  SysUtils,
  Classes,Dialogs;

var SourceBlock:array[1..4,1..4] of array of char;
    AddedZn:integer;
    

{$R *.res}
Function EncryptText(var source:TStringList; key:string):string; stdcall;
var i,j:integer;
    buf:string;
begin
  buf:=source.Text;
  i:=0;

  while length(buf) mod 16 <> 0 do  //Дополняем текст до кратной длины
    begin
      buf:=buf+'0';
      inc(i);
    end;

  //AddedZn:=i;
  result:='5';
  //inttohex (ord(edit1.text[1]) xor ord(edit2.text[1]), 2));
end;

Exports EncryptText {,DecryptText};
begin
end.
Вот код ее использования:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


//const
  //{$WriteableConst On}
  //AddedZn:byte=0;
  //{$WriteableConst Off}

var
  Form1: TForm1;
  EncryptText:function(var source:TStringList; key:string):integer; stdcall;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var abc:TStringList;
    libHandle:HModule;
begin
  abc:=TStringList.Create;
  abc.Text:=form1.Memo1.lines.text;

  @EncryptText:=nil;
  libhandle:=LoadLibrary('project1.dll');
  @EncryptText:=GetProcAddress(libHandle, 'EncryptText');

  If @EncryptText <> nil then
  ShowMessage(inttostr(EncryptText(abc, '12345')))
  else showmessage('fddfb');

  //abc.Free;
  FreeLibrary(libHandle);
end;

end.
При нажатии на кнопку вылезает ексцепшн (скрин во вложении). Я вычислил, что его вызывает строчка "buf:=buf+'0';" в коде библиотеки. Почему вылезает исключение и как исправить код?
Изображения
Тип файла: jpg Безымянный.JPG (10.9 Кб, 96 просмотров)
Abrokadawr вне форума Ответить с цитированием
Старый 03.11.2012, 19:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

sharemem в библиотеке используешь? Если нет то не используй в ней string.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2012, 22:02   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

У вас в dll массив нетак написан. Нужно вот так:
Код:
var SourceBlock:array[1..4][1..4] of char;
Вы посмотрите в dll, навернека, там много ошибок(в основном логических).
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 03.11.2012, 22:22   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
У вас в dll массив нетак написан. Нужно вот так:
Код:
var SourceBlock:array[1..4][1..4] of char;
Вы посмотрите в dll, навернека, там много ошибок(в основном логических).
Не стал вникать, но хочу спросить: почему?
Двумерный массив имеет право быть объявленным вот так:
Код:
SourceBlock:array[1..4, 1..4] of char;
Вадим Мошев вне форума Ответить с цитированием
Старый 03.11.2012, 23:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хочу спросить: почему?
Потому что Саша так привык. Делфи и даже кажется паскаль 7 позволяет описывать так массивы в стиле а-ля Си.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2012, 00:37   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

паскаль - нет. В паскале надо было бы :

Код:
array [1..4] of array [1..4] of char;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от #Н/Д? kachorro Microsoft Office Excel 10 26.04.2012 06:38
Как избавиться от сносок в C++ spam12 Помощь студентам 8 09.02.2012 20:23
при нажатии на ссылку установка выходит диалог открыть или сохранить, как от него избавиться? Rus_ld Общие вопросы Delphi 3 03.05.2010 13:31
Вылезает ошибка with massage 'Invalid floating point operation' подскажите как устранить. Herly Помощь студентам 2 09.01.2010 18:56
Как обработать исключение? XPAiN БД в Delphi 9 16.05.2008 15:09