Ciao, allora ho provato a fare una .NET DLL, e l'ho richiamata dal form .NET, scrivendo questo codice :

in my dll :
codice:
library dllMASTERLIB;

{$UNSAFECODE ON}

{%DelphiDotNetAssemblyCompiler 'c:\programmi\file comuni\borland 
shared\bds\shared assemblies\3.0\Borland.Delphi.dll'}

uses
  SysUtils,
  Classes,
  Variants,
  System.Reflection,
  System.Runtime.InteropServices;

[assembly: AssemblyTitle('')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]

//
// Version information for an assembly consists of the following four 
values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Revision and Build 
Numbers
// by using the '*' as shown below:

[assembly: AssemblyVersion('1.0.*')]

//
// In order to sign your assembly you must specify a key to use. Refer to 
the
// Microsoft .NET Framework documentation for more information on assembly 
signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
//   (*) If no key is specified, the assembly is not signed.
//   (*) KeyName refers to a key that has been installed in the Crypto 
Service
//       Provider (CSP) on your machine. KeyFile refers to a file which 
contains
//       a key.
//   (*) If the KeyFile and the KeyName values are both specified, the
//       following processing occurs:
//       (1) If the KeyName can be found in the CSP, that key is used.
//       (2) If the KeyName does not exist and the KeyFile does exist, the 
key
//           in the KeyFile is installed into the CSP and used.
//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) 
utility.
//       When specifying the KeyFile, the location of the KeyFile should be
//       relative to the project output directory. For example, if your 
KeyFile is
//       located in the project directory, you would specify the 
AssemblyKeyFile
//       attribute as [assembly: AssemblyKeyFile('mykey.snk')], provided 
your output
//       directory is the project directory (the default).
//   (*) Delay Signing is an advanced option - see the Microsoft .NET 
Framework
//       documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile('')]
[assembly: AssemblyKeyName('')]

//
// Use the attributes below to control the COM visibility of your assembly. 
By
// default the entire assembly is visible to COM. Setting ComVisible to 
false
// is the recommended default for your assembly. To then expose a class and 
interface
// to COM set ComVisible to true on each one. It is also recommended to add 
a
// Guid attribute.
//

[assembly: ComVisible(False)]
//[assembly: Guid('')]
//[assembly: TypeLibVersion(1, 0)]

procedure CARD_TO_S(var input:cardinal; var output:string);  ilcode; // 
export;
begin
    output:=IntToStr(input);
      //output:=String(input);
      //output:='Ciao';
  end;
exports
    CARD_TO_S;
begin
end.

Nel mio FORM :

codice:
implementation
      procedure CARD_TO_S(var input:cardinal; var output:String); ilcode; 
external 'D:\DAISIT\ATE A 129\delphi\NUOVA DLL MASTERLIB 
.NET\dllMASTERLIB.dll';


//Description
{$AUTOBOX ON}

{$REGION 'Windows Form Designer generated code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TWinForm.InitializeComponent;
var
  resources: System.Resources.ResourceManager;
begin
  resources := System.Resources.ResourceManager.Create(TypeOf(TWinForm));
  Self.Terminale := AxDartVt.AxVt.Create;
  (System.ComponentModel.ISupportInitialize(Self.Terminale)).BeginInit;
  Self.SuspendLayout;
  //
  // Terminale
  //
  Self.Terminale.Location := System.Drawing.Point.Create(8, 8);
  Self.Terminale.Name := 'Terminale';
  Self.Terminale.OcxState := 
(System.Windows.Forms.AxHost.State(resources.GetObject('T' +
    'erminale.OcxState')));
  Self.Terminale.Size := System.Drawing.Size.Create(1000, 688);
  Self.Terminale.TabIndex := 0;
  //
  // TWinForm
  //
  Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
  Self.ClientSize := System.Drawing.Size.Create(1024, 741);
  Self.Controls.Add(Self.Terminale);
  Self.Font := System.Drawing.Font.Create('Microsoft Sans Serif', 8.25, 
System.Drawing.FontStyle.Regular,
      System.Drawing.GraphicsUnit.Point, (Byte(255)));
  Self.Name := 'TWinForm';
  Self.Text := 'WinForm';
  Include(Self.Load, Self.TWinForm_Load);
  (System.ComponentModel.ISupportInitialize(Self.Terminale)).EndInit;
  Self.ResumeLayout(False);
end;
{$ENDREGION}

procedure TWinForm.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

constructor TWinForm.Create;
begin
  inherited Create;
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent;
  //
  // TODO: Add any constructor code after InitializeComponent call
  // prendo Handle della finestra e lo passo alla unit(procedura 
GET_HANDLE(handle)...
//
end;

procedure TWinForm.TWinForm_Load(sender: System.Object; e: 
System.EventArgs);

var HH : cardinal;
var HOURS: String;
begin
    HH:=4294967295;      // max valore consentito x un cardinale
  CARD_TO_S(HH,HOURS);       // procedure
    MyWriteln(['HOURS=',HOURS]);
end;
end.
Il problema è che il compilatore non mi da alcun errore, però ottengo un risultato che non è quello che mi aspetto.
HOURS=?????
Tra l'altro se eseguo la DLL in debug, non riesco a vedere che valori assumono i miei dati.