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.