Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов DataModule из DLL. [D7, WinXP]


Страницы:   1 2 3

em240 ©   (2008-01-10 12:20:00) 

DLL:
program Project1;

uses
   ShareMem,
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

unit Unit2;

interface

uses
 SysUtils, Classes, DB, ADODB;

type
 TDataModule2 = class(TDataModule)
   ADOConnection1: TADOConnection;
   ADODataSet1: TADODataSet;
   DataSource1: TDataSource;
 private

   { Private declarations }
 public
   Constructor Create(AOwner:TComponent);override;
   { Public declarations }
 end;

var
 DataModule2: TDataModule2;

 function ReturnDM:TDataModule2;stdcall;

implementation

{$R *.dfm}

Constructor TDataModule2.Create(AOwner:TComponent);
begin
   Inherited;
   Self.ADODataSet1.Prepared:=true;
   Self.DataSource1.Enabled:=true;
end;

function ReturnDM:TDataModule2;
begin
   Result:=TDataModule2.Create(nil);

end;

end.

Приложение:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, DBGrids, StdCtrls,DB,ADODB;

type
   TDataModule2 = class(TDataModule)
   ADOConnection1: TADOConnection;
   ADODataSet1: TADODataSet;
   DataSource1: TDataSource;
 private
   //function ReturnDS1:longInt;virtual;stdcall;abstract;
   { Private declarations }
 public
   { Public declarations }
 end;
 TReturnDataModule=function:TDataModule2;stdcall;
 TForm1 = class(TForm)
   DBGrid1: TDBGrid;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 DM:TDataModule2;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   DS:TReturnDataModule;
   LibHandle:THandle;
begin
   LibHandle:=LoadLibrary('Project2.dll');
   try

       if LibHandle=0 then begin
           ShowMessage('No DLL');
           Exit;
       end;
       @DS:=GetProcAddress(LibHandle,'ReturnDM');
       DM:=DS;
       try
       Self.DBGrid1.DataSource:=DM.DataSource1;
       except
       On E:Exception do
           ShowMessage(E.Message);

       end;

   finally
       FreeLibrary(LibHandle);
   end;
end;

end.

Ошибка Access violation(c ShareMem).
Когда отключаю ShareMem, invalid pointer operation.


sniknik   (2008-01-10 19:52:00) [1]

> я это через ком делал.
ТЫ, не делал! ты это автор ветки, который узнал про COM только сегодня, прямо из нее же. или хочеш сказать хватило двух с трех часов на овладение моделью COM и переписыванием датамодуля под нее? ХА два раза.

развод уровня детского сада. (хотя... мы же в нем (начинающих) и находимся... :)


vitv   (2008-01-10 18:21:00) [2]

я это через ком делал.


vitv   (2008-01-10 18:20:00) [3]

Подскажите народ!


sniknik   (2008-01-10 18:09:00) [4]

> ок, Ваше предложение.
оставь бредовые затеи, и займись наконец работой.


em240   (2008-01-10 15:25:00) [5]


> sniknik ©   (10.01.08 14:57) [39]
> > Тут и COM не поможет :)см. [31], поможет, если сделать
> собственный на интерфейсах.> Поменяю структуру Дэлфи приложения.
> пахнет не сменой структуры приложения, а полной заменой
> базовых(не БД имеется ввиду...) вещей из генофонда. готов
> написать свой VCL? и ради чего?(может хоть этот "не уйдет".
>  переубедиться. ;о))

ок, Ваше предложение.


sniknik   (2008-01-10 14:57:00) [6]

> Тут и COM не поможет :)
см. [31], поможет, если сделать собственный на интерфейсах.

> Поменяю структуру Дэлфи приложения.
пахнет не сменой структуры приложения, а полной заменой базовых(не БД имеется ввиду...) вещей из генофонда. готов написать свой VCL? и ради чего?
(может хоть этот "не уйдет". переубедиться. ;о))


em240   (2008-01-10 14:02:00) [7]

Поменяю структуру Дэлфи приложения.


Игорь Шевченко   (2008-01-10 14:01:00) [8]

Это все конечно хорошо и можно сделать через DLL, но вот такой вопрос - откуда приложение на Vusual-что-то узнает о том, что на свете есть такая вещь, как датамодуль ?
Тут и COM не поможет :)


Сергей М.   (2008-01-10 13:25:00) [9]


> Истина рождается в споре


Мне просто любопытно, как ты вознамерился сочетать

"Нужно чтобы датамодуль могли использовать несколько приложений"

и

"через СОМ"


em240   (2008-01-10 13:23:00) [10]

:)
Истина рождается в споре :)


Сергей М.   (2008-01-10 13:19:00) [11]


> Всё будет через сом


Быстро же ты оглобли заворачиваешь)


em240   (2008-01-10 13:18:00) [12]


> Palladin ©   (10.01.08 13:17) [30]
> > [29] Сергей М. ©   (10.01.08 13:15)да видимо разные функции
> будут вызываться в зависимости от инструмента разработки
> :)

да

Всё будет через сом.


Сергей М.   (2008-01-10 13:18:00) [13]


> Palladin ©   (10.01.08 13:17) [30]


Мда уж)


sniknik   (2008-01-10 13:17:00) [14]

> то Датамодуль.
датамодуль тебе не пойдет чтобы в VS его использовать, нужно чтото вроде ядра ADO (т.е. полностью COM обьект, или тот же remotedatamodule, правда с собственной реализацией передачи данных (вряд ли у тебя есть дока по этим, или каким другим обьектам. дока, до уровня протоколов, а не по использованию.))


Palladin   (2008-01-10 13:17:00) [15]


> [29] Сергей М. ©   (10.01.08 13:15)

да видимо разные функции будут вызываться в зависимости от инструмента разработки :)


Сергей М.   (2008-01-10 13:15:00) [16]


> em240 ©   (10.01.08 13:13) [27]


Что "т.е." ?

В своей библ-ке ты объявил/реализовал/экспортиоровал ф-цию

function ReturnDM:TDataModule2;stdcall;
begin
.. здеськак ты собрался определять, откуда вызвана твоя ф-ция ? ...
end;


em240   (2008-01-10 13:15:00) [17]


> sniknik ©   (10.01.08 13:07) [22]
> > В приложении, написанном на VS(MFC), необходимо работать
> с формами delphi приложения.с этого надо было начинать.
> см. COM, ActivX, интерфейсы. это общее для всей винды.

ОК.


em240   (2008-01-10 13:13:00) [18]


> Сергей М. ©   (10.01.08 13:11) [26]
> > em240 ©   (10.01.08 13:09) [24]Тем дальше в лес, тем толще
> партизаны)Надо понимать, ты как разработчик ДЛЛ знаешь откуда
> была вызвана экспортируемая тобой функция ?

т.е.?


Сергей М.   (2008-01-10 13:11:00) [19]


> em240 ©   (10.01.08 13:09) [24]


Тем дальше в лес, тем толще партизаны)

Надо понимать, ты как разработчик ДЛЛ знаешь откуда была вызвана экспортируемая тобой функция ?


Palladin   (2008-01-10 13:11:00) [20]

как все жестоко...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо