Перейти к содержанию
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 пользователей онлайн

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