Newsgroup: it.comp.lang.delphi
Titolo: Delphi Dll Form da VB

Ciao a tutti.. ho questo problema...
Devo agganciare ad un progetto esistente in VB (che stiamo sviluppando in
team) alcune
form sviluppate in delphi, in mdi, all'interno di dll...
C'è qualche gentilissimo :P che ha una bozza già funzionante?
mezzo codice vb o cmq la chiamata per richiamare la dll di delphi?
Grazie Grazie Grazie


In qualche modo ho risolto.. o meglio.. ho capito cosa fare...
ma non riesco ancora come... sto trovando esempi ma sono un po intrecciati..
e non completi per avere un test funzionante...
Mi servirebbe un'esempio di form in dll fatta in delphi, con passaggio
dell'handle dell'applicatione "madre"..
Avete esempi sotto mano?
Grazie

Ciao
   ho sviluppato una dll con Delphi che contiene una form usabile con 
qualsiasi programma, tra cui VB. Quello che ti serve è il modo per 
atttivare e usare una form (nello specifico risiedente in una dll fatta 
con Delphi) da VB? Se è questo e non ti serve che sia MDIChild della tua 
applicazione, fammelo sapere che t'invio il codice VB6 per farlo.
Ciao, Mario

--- posted by geoForum on 
http://www.delphiedintorni.it


Ciao
   sui libri di Marco Cantù (tutti detti "La bibba") da programmare con 
Delphi 5 (capitolo 14 a pag.570) a programmare in Delphi 7 (capitolo 10 a 
pag. 418) ci sono esempi su come fare quello che ti serve; io sono 
partito da zero e in un giorno sono riuscito a fare una DLL con una form 
Delphi che viene visualizzata quando si vuole. In particolare ho usato 
una funzione esportata dalla DLL in cui uno dei parametri indica se 
aprire o meno la form della DLL. Ho scritto poi un programmino per fare 
il test della DLL e ho messo tutto in un BPG e così posso persino mettere 
breakpoint sul codice DLL mentre la provo: è uno spettacolo e anche molto 
facile e divertente. In poche parole basta con File-new fare doppio clic 
su DLL e lui genera un codice tipo:
library NomeDll;
uses
  SFormDll_TestConnessione in 'DllFormTest\SFormDll_TestConnessione.pas' 
{Test};
exports
  ConnectCom, ResetTimeENmLap, HitCount, DisconnectCom;
  {$R *.RES}
begin
end.
Poi fare di nuovo New e aggiungere una Form oppure importare nel progetto 
la unit di una form precedentemenet fatta; l'unica cosa è aggiungere 
nella unit della form la dichiarazione delle funzioni esportate; la 
struttura della unit della form sarà:
unit SFormDll_TestConnessione;
type
  TTest = class(TForm)
    ....
  private
    ....
  public
    { Public declarations }
  end;
  function ConnectCom(NumSeriale: LongInt; HandleWndGestCopyData:
                      THandle; MostraFrmTest: boolean): boolean; stdcall;
  Function DisconnectCom: boolean; stdcall;
  Function HitCount(State: boolean): boolean; stdcall;
  Function ResetTimeENmLap(): boolean; stdcall;
var
  Test: TTest;
implementation
....
Degno di nota è l'implementazione della prima function:
function ConnectCom(NumSeriale: Integer; HandleWndGestCopyData: THandle; 
MostraFrmTest: boolean): boolean;
begin
  Result := false;
  try
    Test:=TTest.create(application);
    hwndProgChiamante :=  HandleWndGestCopyData;
    if MostraFrmTest = True then
    begin
      Test.show;
      result := true;
      exit;
    end;
  except
    on E: Exception do
    begin
      Application.MessageBox(pchar('Errore nell''uso della DLL: ' +
                             E.Message ),'Dll Crono',MB_OK+MB_ICONERROR);
      Test.free;
    end
  end;
end;
Nota l'Handle del programma chiamante: è lui stesso che me lo deve 
inviare con l'utilizzo della prima funzione; in questo modo è facile 
comunicare con il chiamante senza doverlo cercare con l'API FindWindow
Compili il tutto e il gioco è fatto.
Spero di esserti stato d'aiuto. Se ti serve altro non fare complimenti.
Ciao, Gian Mario.
