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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2012, 14:15   #1
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
Вопрос EInvalidPointer при закрытие проекта даже если отсутствует код...

Каждый раз как я закрываю проект появляется ошибка:


Даже при том что отсутствует какой либо код. Он раньше был, но я его абсолютно весь закомментировал.
Код:
unit Unit1;

interface

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


type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Bevel1: TBevel;
    Memo1: TMemo;
    Button5: TButton;
    Button6: TButton;
    Edit5: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Edit6: TEdit;
    {procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);}
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{procedure Open1(FileName:PANSIString; ObjName:TMemo);
  stdcall; external 'Project3.dll';
procedure Save1(FileName:PANSIString; ObjName:TMemo);
  stdcall; external 'Project3.dll';
function Double(N: Integer): Integer;
  stdcall; external 'Project2.dll';
function Triple (N: Integer): Integer;
  stdcall; external 'Project2.dll';
function DoubleString(S: string; Separator: Char): string;
  stdcall; external 'Project2.dll';
function DoublePChar(BufferIn, BufferOut: PChar;
  BufferOutLen: Cardinal; Separator: Char): LongBool;
  stdcall; external 'Project2.dll';



procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(Double(StrToInt(Edit1.Text)));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit2.Text := IntToStr(Triple(StrToInt(Edit2.Text)));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit3.Text:=DoubleString(Edit3.Text, ';');
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  Buffer: string;
begin
  SetLength (Buffer, 1000);
  if DoublePChar(PChar(Edit3.Text),PChar(Buffer),1000,'/')
    then
      Edit4.Text:= Buffer;

end;

procedure TForm1.Button5Click(Sender: TObject);
var
  s:ANSIstring;
begin
  s:=Edit5.Text;
  Open1(PANSIString(s),Memo1);
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  s:ANSIstring;
begin
  s:=Edit6.Text;
  Save1(PANSIString(s),Memo1);
end;}

end.
Работаю с двумя DLL.
Код:
library Project1;

uses
  ShareMem,
  Windows,
  SysUtils,
  Classes,Controls, StdCtrls, ExtCtrls;

{$R *.res}

{function Triple (C: Char): Longint; stdcall; overload;
begin
  MessageBox (0, 'Вызвана функция Triple',
    'First DLL', mb_OK);
  Result := Ord (C) * 3;
end;

function Triple (N: Longint): Longint; stdcall; overload;
begin
//  ShowMessage ('Triple function called');
  MessageBox (0, 'Вызвана функция Triple',
    'First DLL', mb_OK);
  Result := N * 3;
end;

function Double (N: Longint): Longint; stdcall;
begin
  MessageBox (0, 'Вызвана функция Double',
    'First DLL', mb_OK);
  Result := N * 2;
end;

function DoubleString (s: string; Separat: Char): string; stdcall;
begin
  Result:= s+Separat+s;
end;

function DoublePChar (BufferIn, BufferOut: PChar;
  BufferOutLen: Cardinal; Separator: Char): LongBool; stdcall;
var
  SepStr: array [0..1] of Char;
begin
  if BufferOutLen > StrLen (BufferIn) * 2 + 2 then
  begin
    StrCopy (BufferOut, BufferIn);
    SepStr [0] := Separator;
    SepStr [1] := #0;
    StrCat (BufferOut, SepStr);
    StrCat (BufferOut, BufferIn);
    Result := True;
  end
  else
    Result := False;
end;

exports
  Triple (N: Longint),
  Triple (C: Char) name 'TripleChar',
  Double, DoubleString, DoublePChar; }

end.
Код:
library Project1;

uses
  ShareMem,
  Windows,
  SysUtils,
  Classes,Controls, StdCtrls, ExtCtrls;

{$R *.res}

{procedure Open1(FileName:PANSIString; ObjName:TMemo);stdcall; overload;
begin
  If ANSIString(FileName)=''
    then
      begin
        MessageBox (0, 'Введите пожалуйста имя файла','MyDLL', mb_OK);
        EXIT;
      end;
  If FileExists(ANSIString(FileName))
    then
      ObjName.Lines.LoadFromFile(ANSIString(FileName))
    else
      MessageBox (0, 'Файл не найден','MyDLL', mb_OK);
end;

procedure Save1(FileName:PANSIString; ObjName:TMemo);stdcall; overload;
begin
  ObjName.Lines.SaveToFile(ANSIString(FileName));
end;

exports
  Open1 (F:PANSIString; O:TMemo),
  Save1 (F:PANSIString; O:TMemo);}
end.
Помогите пожалуйста разобраться.
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 04.05.2012, 23:50   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Invalid pointer означает попытку выполнения операции освобождения памяти по недействительному указателю. Может ты мусор туда передаёшь, может указатель испорчен, а может ты дважды освобождаешь один и тот же блок.

Менеджер памяти в отладочном режиме тебе в помощь.

P.S. "ShareMem", "FileName:PANSIString; ObjName:TMemo" - рыдаю в истерике. Чему после такого вообще удивляться?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 07.05.2012, 03:56   #3
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
P.S. "ShareMem", "FileName:PANSIString; ObjName:TMemo" - рыдаю в истерике. Чему после такого вообще удивляться?
Не мои свистопляски. Препод: "Так будет лучше!"


Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Invalid pointer означает попытку выполнения операции освобождения памяти по недействительному указателю. Может ты мусор туда передаёшь, может указатель испорчен, а может ты дважды освобождаешь один и тот же блок.
Итак всё это знаю

P.S. Чушь и абсурдность ситуации ещё в том, что я сей час переписал всё с нуля, делая при этом те же действия, и всё работает нормально, ошибки нет!
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 07.05.2012, 04:05   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Где-то забыл код, старые dcu, не пересобрался код и т.п....
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отследить нажатие кнопки даже если нет фокуса на форме gufon Общие вопросы Delphi 1 01.06.2011 15:29
Exel - при открытии файла через макрос, если файл отсутствует - виснет весь макрос gregory1b Microsoft Office Excel 2 14.10.2010 11:51
Access запрашивает пароль на все файлы даже если пароль не устанавливался d_adilet Microsoft Office Access 1 11.06.2010 19:44
исправить это условие чтоб "1" выводилось на терминал даже если $stdat2[9] принимала не числовые значения sergeyfromkomi PHP 5 24.04.2010 10:44
Если файл отсутствует, то создать NSvirus Паскаль, Turbo Pascal, PascalABC.NET 3 18.05.2009 19:23