Перейти к содержанию
Fire Monkey от А до Я
  • 0

Access Violation kernel32.dll


DarkFlash

Вопрос

Опубликовано

Получаю Access Violation на некоторых рабочих станциях при запуске программы, форма выводится, но совершенно пустая без контролов.

Код мизерный, закомментил вызовы других модулей.

Рабочие станции вроде одинаковые. Может кто сталкивался с таким?

КОД:

unit uMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,System.Threading{,CustomExcelFunctions},
  ActiveX,System.SyncObjs,uRangeAdd,System.IOUtils, FMX.Edit;

type
  TfMain = class(TForm)
    od_openfiles: TOpenDialog;
    m_files: TMemo;
    btn_openfiles: TButton;
    m_cells: TMemo;
    btn_exec: TButton;
    btn_addcells: TButton;
    gb_files: TGroupBox;
    gb_cells: TGroupBox;
    pb_files: TProgressBar;
    Button1: TButton;
    Edit1: TEdit;
    procedure btn_openfilesClick(Sender: TObject);
    procedure btn_execClick(Sender: TObject);
    procedure btn_addcellsClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fMain: TfMain;

implementation

{$R *.fmx}

procedure ClearBlanksFromList(AList:Tstrings);
var
  i:integer;
begin
  for I := AList.Count-1 downto 0 do
    if AList.Strings[i] = '' then
      AList.Delete(i);
end;

procedure TfMain.btn_openfilesClick(Sender: TObject);
begin
  if od_openfiles.Execute then
  begin
    m_files.Lines.Text:=od_openfiles.Files.Text;
    ClearBlanksFromList(m_files.Lines);
    pb_files.Max:=m_files.Lines.Count;
  end;
end;

procedure TfMain.Button1Click(Sender: TObject);
begin
  if od_openfiles.Execute then
  begin
    edit1.Text:= od_openfiles.Files.Strings[0];
  end;
end;

procedure TfMain.FormShow(Sender: TObject);
begin
  {if TFile.Exists('Cells.txt') then
    m_cells.Lines.LoadFromFile('Cells.txt'); }
end;

procedure TfMain.btn_execClick(Sender: TObject);
var
  A: array[0..10000] of integer;
  j:integer;
  ex:variant;
  max:integer;
  s:string;
begin
  if Edit1.Text='' then
    raise Exception.Create('Не выбран файл для результата');
  if m_files.Lines.Count = 0 then
    raise Exception.Create('Не выбранs файлы для обработки');
  Cursor:=crHourGlass;
  for j := 0 to m_cells.Lines.Count-1 do
    A[j]:=0;
  max:=m_files.Lines.Count-1;
  pb_files.Value:=0;
  TParallel.For(0,max, procedure (I:integer)
    var
      ex:variant;
      j:integer;
    begin
      CoInitialize(nil);
      try
        if m_files.lines.strings[i]<>'' then
        begin
          exit;
          //ex:=OpenExcelBook(False,m_files.lines.strings[i]);
          for j := 0 to m_cells.Lines.Count-1 do
            if m_cells.Lines.Strings[j]<>'' then
            begin
              s:=ex.range[m_cells.Lines.Strings[j]];
              if (s<>'') and (s<>'0') then
                A[j]:=A[j]+1;
            end;
          ex.DisplayAlerts := False;
          ex.Quit;
          pb_files.Value:=pb_files.Value+1;
        end;
      finally
        CoUninitialize;
      end;
    end);
  while pb_files.Value<>pb_files.Max do
    sleep(1000);
    exit;
  //ex:=OpenExcelBook(True,edit1.Text);//CreateNewExcelBook(True);
  for j := 0 to m_cells.Lines.Count-1 do
    if m_cells.Lines.Strings[j]<>'' then
    begin
      ex.range[m_cells.Lines.Strings[j]]:=A[j];
    end;
  Cursor:= crAppStart;
end;

procedure TfMain.btn_addcellsClick(Sender: TObject);
begin
  if fRangeAdd.ShowModal = mrOk then
  begin
    m_cells.Lines.Text:= m_cells.Lines.Text + fRangeadd.e_Range.Text;
    fRangeadd.e_Range.Text:='';
    ClearBlanksFromList(m_cells.Lines);
  end;
end;

end. 

Рекомендуемые сообщения

  • 0
Опубликовано

ну раз используете activex, значит проблема в нем. может excel не установлен

 

Установлен. Одинаковая редакция. Плюс я закомментил вызов самого Excel. Если чтот-о и происходит, то во время инициализации.

Как я выше написал. Форма при запуске приложения появляется пустая вся, то есть я в принципе весь этот код вызвать не могу, так как он вызывается из контролов.

  • 0
Опубликовано

что Debug говорит?

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

  • 0
Опубликовано

Глянь эту ветку, не твой ответ?

 

http://fire-monkey.ru/topic/1793-access-violation-v-windows7/

 

Я просто переписал все на VCL. Срочно нужно было решение. Может позже при наличии времени, поковыряюсь. Всем спасибо за помощь.

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...