Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компилятор выдаёт ошику! Голову сломал... Не могу разобраться почему ошибка 
V
    Опции темы
yrajoey
Дата 15.2.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.10.2006

Репутация: нет
Всего: нет



У меня есть dll-библиотека(project2.dll):
Код

library Project2;

uses
  SysUtils,
  Classes;

procedure SummEdit1(x:integer);
var a:integer;
begin
a:= x + 10;
end;

{$R *.res}

exports SummEdit1;

begin
end.
 

и unit1.pas основного проекта:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure SummEdit1(x:integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SummEdit1; external 'Project2.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
SummEdit1(strtoint(Edit1.Text));
end;

end.



При компиляции последнего выдаёт ошибку:
"Точка входа в процедуру TForm1.SummEdit1 не найдена в библиотеке DLL Project2.dll" Что же делать??? подскажите


M
Alexeis
Модератор: Название темы должно отражать ее суть!


Это сообщение отредактировал(а) Alexeis - 15.2.2008, 22:08
PM MAIL   Вверх
lukas
Дата 15.2.2008, 22:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Скорее всего твоя процедура не должна быть методом формы....

Код


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

  procedure SummEdit1; external 'Project2.dll';

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SummEdit1(strtoint(Edit1.Text));
end;
end.



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
VICTAR
Дата 15.2.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Задай процедуре имя или индекс
PM MAIL   Вверх
yrajoey
Дата 15.2.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.10.2006

Репутация: нет
Всего: нет



lukas,  Да! Вы правы... Работает. Только после выхода опять ошибка: "Проект Project1.exe вызвал исключение класса 'EInvalidPointer operation' Процесс остановлен" 
PM MAIL   Вверх
VICTAR
Дата 15.2.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



А где параметр в объявлении функции?
Код

procedure SummEdit1(x:integer); external 'Project2.dll';

PM MAIL   Вверх
yrajoey
Дата 15.2.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.10.2006

Репутация: нет
Всего: нет



VICTAR,  Не... Не фига... всё также...ошибка
PM MAIL   Вверх
ivan219
  Дата 16.2.2008, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Нужно сночало договорится StdCall;
Код

procedure SummEdit1(x:integer);  StdCall;

procedure SummEdit1(x:integer); StdCall; external 'Project2.dll';


Это сообщение отредактировал(а) ivan219 - 16.2.2008, 00:44
PM MAIL ICQ   Вверх
yrajoey
Дата 16.2.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.10.2006

Репутация: нет
Всего: нет



ivan219, Если бы всё так просто... это не помогает
PM MAIL   Вверх
THandle
Дата 16.2.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Библиотеку чуть чуть изменил чтоб было видно что хлть делается, вот она:

Код

library Project2;
uses
  SysUtils,
  Classes, Dialogs;

procedure SummEdit1(x:integer); stdcall;
var a:integer;
begin
a:= x + 10;
ShowMessage(IntToStr(a));
end;

{$R *.res}
exports SummEdit1;

begin
end.



А вот сам модуль проги:

Код

unit Unit1;

interface

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

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

  procedure SummEdit1(x : integer); stdcall; external 'Project2.dll' name 'SummEdit1';
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SummEdit1(StrToInt(Edit1.Text));
end;

end.




PM   Вверх
lukas
Дата 16.2.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Вообще должно работать и без stdcall... если в том же делфи использовать... 


Код

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

  procedure SummEdit1(x: Integer); external 'Project2.dll';

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SummEdit1(strtoint(Edit1.Text));
end;

end.



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
ivan219
  Дата 16.2.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Цитата(yrajoey @  16.2.2008,  14:52 Найти цитируемый пост)
это не помогает

Уменя этот код невызывает никаких ошибок!

Цитата(lukas @  16.2.2008,  17:16 Найти цитируемый пост)
Вообще должно работать и без stdcall

Но правильнее делать всёже с stdcall;

Это сообщение отредактировал(а) ivan219 - 16.2.2008, 18:45
PM MAIL ICQ   Вверх
yrajoey
Дата 19.2.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 2.10.2006

Репутация: нет
Всего: нет



Спасибо всем
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.