J'utilise Unmanaged Exports pour créer un fichier .dll natif à partir de .NET .dll afin que je puisse accéder au code .NET à partir de Delphi sans enregistrement COM.FoxPro et .NET COM sans enregistrement
Par exemple, j'ai cet ensemble de .NET:
using System;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace DelphiNET
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("ACEEED92-1A35-43fd-8FD8-9BA0F2D7AC31")]
public interface IDotNetAdder
{
int Add3(int left);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class DotNetAdder : DelphiNET.IDotNetAdder
{
public int Add3(int left)
{
return left + 3;
}
}
internal static class UnmanagedExports
{
[DllExport("createdotnetadder", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
static void CreateDotNetAdderInstance([MarshalAs(UnmanagedType.Interface)]out IDotNetAdder instance)
{
instance = new DotNetAdder();
}
}
}
Lorsque je définis la même interface Delphi, je peux facilement utiliser l'objet .NET:
type
IDotNetAdder = interface
['{ACEEED92-1A35-43fd-8FD8-9BA0F2D7AC31}']
function Add3(left : Integer) : Integer; safecall;
end;
procedure CreateDotNetAdder(out instance : IDotNetAdder); stdcall;
external 'DelphiNET' name 'createdotnetadder';
var
adder : IDotNetAdder;
begin
try
CreateDotNetAdder(adder);
Writeln('4 + 3 = ', adder.Add3(4));
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Voir ma Delphi question and answers pour plus de détails .
Ma question:
est quelque chose comme cela possible dans FoxPro? J'ai essayé ceci qui échoue avec incompatibilité de type de données erreur sur la ligne createdotnetadder(@ldnw)
:
DECLARE createdotnetadder IN DelphiNET.dll object @ ldnw
ldnw = 0
createdotnetadder(@ldnw)
loObject = SYS(3096, ldnw)
? loObject.Add3(4)
Puis-je définir l'interface dans FoxPro De même que je l'ai fait dans Delphi? Sinon, puis-je utiliser ce fichier .dll à partir de FoxPro? J'utilise Visual FoxPro 9.0 SP2. Merci.
Rick Strahl a un bon article sur VFP COM Interop ici: http://www.west-wind.com/presentations/VfpDotNetInterop/DotNetFromVFP.asp –
@Brian: Je connais les pages de Rick. Je voulais éviter l'enregistrement COM mais il semble que ce n'est pas possible dans FoxPro. –