Newsgroup: it.comp.lang.delphi
Titolo: DLL prodotte con altri compilatori e Delphi

Stavo facendo delle prove di mescolare linguaggi e sono arrivata a questo:
DLL prodotta in Delphi + programma di uso in Delphi -> OK
DLL prodotta in VB + programma di uso in VB -> OK
Ma se provo ad usare in delphi una dll prodotta in VB non c'e' verso di 
fargliela vedere.
Anche se si tratta di una dll senza parametri in ingresso passati o 
risultati in uscita restituiti.
Qualcuno l'ha gia' fatto o sa consigliarmi dove posso trovare un micro 
esempio ?
Claudia 

 esempio ?
hai letto la guida a proposito delle calling convention? stdcall etc?
AS

 esempio ?
Sto lavorando proprio adesso con uno che programma in vb e ci scambiamo  
informazioni mediante chiamate a dll l'uno dell'altro, senza problemi.
Se mi parli di parametri, posso anche capire (solitamente il problema e'  
sulle stringhe)
ma anche senza parametri, non capisco.
Dovresti postare il codice di esempio che usi, per capire cosa non fa.
Ciao.Alberto.
-- 
===============================================================
Alberto Rubinelli - A2 SISTEMI  Opera 8.50
Via Costantino Perazzi 22 - 28100 NOVARA - ITALY
Tel 0321 640149  Fax 0321 391769 BBS 0321 392320
Mail: 
alb...@retrocomputing.net
  ICQ : 49872318
Skype : albertorubinelli
Visita il mio museo di computers - Visit my old computers museum
 
http://www.oldcomputers.it
---------------------------------------------------------------

fargliela vedere.
Nell'esposizione dei problemi siete sempre troppo ambigui.  Come vi si
puň aiutare se non spiegate *dettagliatamente* i problemi che avete?
E' come se io chiamassi il medico per telefono e gli dicessi: dottore,
mi fa male qui.
Che significa "non c'č verso di fargliela vedere" ? Viene fuori un
errore a run-time? Se sě, che tipo di errore?
Nel caso, questa č un'informazione essenziale.
Sei sicura che la convenzione di passaggio dei parametri sia quella
standard, sotto VB? (quel sistema fa cose strane, in determinati
casi).  Se puoi, posta un po' di codice (sia Delphi, sia VB).

 Dovresti postare il codice di esempio che usi, per capire cosa non fa.
Ok, un punto importate l'ho capito... cioe' che si puo' fare :-)
Il tuo collega usa vb2005 o vb6 ?
Ho sempre lavorato solo con delphi e di esperienza vb ne ho poca.
Sto usando visual basic 2005, ed ho notato che la dll che vb mi produce,
esaminandola con il comando tdump non ha le voci EXPORT
che sono invece presenti nelle dll prodotte in delphi.
Quindi penso che l'esempio che ho trovato ed usato di dll in vb manchi
di qualche parte dichiarativa probabilmente non necessaria per fare vb+vb
Claudia 

 casi).  Se puoi, posta un po' di codice (sia Delphi, sia VB).
Gia'... e' proprio di quello che non sono sicura: che si possa fare.
per il codice, in delphi la dll scarna scarna e:
-----
library simplemess;
uses dialogs;
procedure DllMessage; export;
begin
  ShowMessage('Hello world from a Delphi DLL');
end;
exports DllMessage;
end.
----
Mentre il codice che la chiama:
----
unit Unit1;
interface
uses
  Windows, Messages, Classes, Controls, StdCtrls, Forms;
type
  TShowForm = procedure;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    DLLHandle: THandle;
    ShowForm : TShowForm;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure DLLmessage; stdcall; external 'simplemess.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
  showform;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  DLLHandle := LoadLibrary('simplemess.dll');
  if DLLHandle <> 0 then
  begin
    @ShowForm := GetProcAddress(DLLHandle, 'DllMessage');
  end;
end;
end.
----
Quello che non riesco a fare e' una dll in vb che faccia la stessa cosa.
Anche se non trovando esempi in giro su internet mi nasce
il dubbio che non sia possibile farlo usando vb2005
Claudia

 che sono invece presenti nelle dll prodotte in delphi.
Un attimo... non sono un programmatore, quindi mi scuso in anticipo per 
eventuali castronerie ;-)
Comunque sia VB 2005 compila delle dll che sono librerie di classi 
gestite .NET. Queste non credo che abbiano molto a che vedere con le dll 
"classiche" Win32.
Le vuoi fare vedere una libreria .NET a una applicazione Win32, la dll 
deve almeno esporre una interfaccia COM o qualcosa di simile.
Prova a vedere se questi articoli ti possono aiutare:
http://interop.managed-vcl.com/netinterop_csharp.php
http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm
Ma io da profano mi chiedo: ha senso mischiare codice gestito e non 
gestito nella stessa applicazione?
-- 
Saluti
VITRIOL

 gestito nella stessa applicazione?
No, ovviamente no, se sono io che faccio l'intera applicazione.
Mi scrivo tutto in delphi e stop.
Ma c'e' tutto un pezzo di calcolo e di interfaccia che un altro 
programmatore ha sviluppato in vb e dovrebbe passarmi la dll da richiamare. 
E a dire il vero non so neppure se ha usato vb2005 vb2003 o vb6.
Cosi' mi sono messa a fare delle prove di comunicazione tra i due linguaggi.
Poi magari sono io che mi sto fasciando la testa prima di essermela rotta ed 
appena mi manda
effetticamente le sue dll queste si comporteranno alla perfezione...
Claudia 

 
http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm
Grazie, centrato in pieno il problema :-)
Avevo cercato parecchio in giro senza riuscire a trovare le info che stanno 
in questi due link.
In pratica a me conviene aspettare e vedere che dll mi passera' l'altro 
programmatore visto che ancora non so con cosa ha scritto la libreria se non 
la generica informazione che l'ha fatta in visual basic.
Grazie ancora, ciao
Claudia 

 ----
quando dichiari la procedura NELLA DLL, hai messo anche qui stdcall come  
metti nella dichiarazione con cui la chiami ?
procedure DllMessage ; stdcall ; export ;
   begin
     { faccio qualcosa che serve }
   end ;


 che sono invece presenti nelle dll prodotte in delphi.
Strano, potrebbe aver esportato le funzioni per indice invece che per  
nome, ma mi sembra strano .
