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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспорт функций из EXE, Возможноли это? и как? 
V
    Опции темы
ivan219
  Дата 1.10.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вопрос: возможноли из EXE файла экспортировать функцию как из DLL smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 2.10.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Сам лично не проверял, но утверждают что можно. Пишется секция экспорта (как в длл). При компиляции проекта должны сформироватся точки входа для всех функций экспорта.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dumb
Дата 2.10.2006, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(ivan219 @  1.10.2006,  23:50 Найти цитируемый пост)
Вопрос: возможноли из EXE файла экспортировать функцию как из DLL

возможно. ты лучше скажи, что ты потом с этим делать будешь? smile
PM MAIL   Вверх
ivan219
Дата 2.10.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(dumb @ 2.10.2006,  00:35)
ты лучше скажи, что ты потом с этим делать будешь? smile

Вызывать из DLL smile

Добавлено @ 09:05 
alexeis1,  smile а то я попробывал но нечего не вышло smile 
PM MAIL ICQ   Вверх
Romikgy
Дата 2.10.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(ivan219 @  2.10.2006,  08:03 Найти цитируемый пост)
Вызывать из DLL

а че не вызывать ф_ции длл_ки с параметрами и данными ?

имхо если хочешь юзать с экспортом , то этот ехе надо будет грузить в память как длл 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
ivan219
Дата 2.10.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Работает там просто надо отдельно процедуры и функции описыват т.е. так
Код

procedure D;stdcall;
var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure D;stdcall;
begin
    //
end;

 exports D;
end.

А я делал так
Код

type
  TForm1 = class(TForm)
  procedure D;stdcall;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.D;stdcall;
begin
    //
end;

 exports D;



Romikgy, щас попробую.
PM MAIL ICQ   Вверх
ivan219
Дата 2.10.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Всё работает как часы smile 
Программа.
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button: TButton;
    Label1: TLabel;
    procedure ButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure F;stdcall; //Экспортируемая процедура EXE

procedure P;stdcall; external 'Project2.dll' Name 'P'; //Импортируемая процедура DLL
var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure F;stdcall;
begin
 Form1.Label1.Caption:='asdfsdf';
end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
 P;
end;

exports F;
end.
end.

Библиотека.
Код

library Project2;

procedure F;stdcall; external 'Project1.exe' Name 'F'; //Импортируемая процедура из EXE

procedure P;stdcall; //Экспортируемая процедура
begin
 F;
end;

exports P;
begin
end.


Сейчас проверю с разными пораметрами.

Добавлено @ 09:50 
И с пораметрами тоже работает!
PM MAIL ICQ   Вверх
gambit
Дата 4.3.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Что не так? Все делаю как написано, только вызов процедур не из Dll а из другово exe. В итоге получаю:

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  ______.JPG 12,20 Kb
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 4.3.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



ну и изврат...
ничего другого, кроме как AV, и не должно происходить.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
W4FhLF
Дата 4.3.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата(gambit @  4.3.2007,  13:48 Найти цитируемый пост)
Что не так? 


Релоки на месте?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
skyboy
Дата 4.3.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(ivan219 @  2.10.2006,  08:25 Найти цитируемый пост)
Работает там просто надо отдельно процедуры и функции описыват

Цитата(ivan219 @  2.10.2006,  08:25 Найти цитируемый пост)
А я делал так <...>

А это, друг мой, оттого, что ты не знаешь различия между методом и функцией. smile экспортироваться могут только функции и процедуры; методы(объекта и класса) экспортироваться не могут - на уровне ядра системы нет работы с объектом. Точно так же из dll/exe нельзя экспортировать классы(только из bpl).
PM MAIL   Вверх
gambit
Дата 5.3.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Цитата(skyboy @  4.3.2007,  14:20 Найти цитируемый пост)
А это, друг мой, оттого, что ты не знаешь различия между методом и функцией. 


skyboy, ты так написал, как будто я в этой теме главный и весь код написан мной. Просто я искал по форуму, и чтоб не заводить новую тему, поднял эту.
Экспортировал я именно процедуры, а не методы.
Цитата

Все делаю как написано

этой фразой я имел ввиду, то что я использовал в своей проге вот эту фигню.
Код

stdcall;

.
MetalFan, объясни в чем изврат.
Есть комплекс программ. И я хочу сделать экспорт процедур из главного модуля. Например занесение данных в журнал событий. Что в этом извращенческого?
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 5.3.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



gambit, ты хочешь получить доступ через экспортированные функции exe к данным запущенного приложения?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
gambit
Дата 5.3.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



MetalFan, например есть процедура занесения события в журнал событий.
Код

procedure journal(s:string;n:integer);
begin
sobutie:=s;
tip:=n;
.....
end;

Грубо но предположим что так. Эта программа будет запускать другую. Например в той программе произошла ошибка и я хочу чтоб данные об ошибки можно было занести в журнал первой программы.
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 5.3.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



gambit, фокус в том, что если программа запущена как программа, то из нее уже ничего нельзя экспортировать. Когда экзешник используется как DLL, то он грузиться в адресное пространство программы, которая его загрузила и работает в ее контексте, т.е. просто как будто это DLL с измененым расширением. Это возможно, поскольку у обоих модулей общий формат экзешника PE. Любые другие действия не будут работать. Т.е. даже если программу сначала загрузить как экзешник, а затем как Dll, то это в памяти будут две разные копии.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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