Je suis en train d'importer un assembly .NET dans Delphi pour créer un fichier « _TLB.pas », mais je reçois une erreur:Importation assembly .NET dans Delphi échoue
Ce qui est à l'origine cette erreur?
L'assembly .NET n'est pas construit avec les attributs d'assembly corrects?
Existe-t-il une limitation sur la version .NET (4.6.1) que XE4 peut importer?
L'assembly .NET illustré ci-dessous a été créé avec VS 2012 sur .NET 4.6.1.
Utilisation de Delphi XE4, procédez comme suit:
- Component -> Importer un composant -> Importer une bibliothèque de type
- Cliquez sur 'Ajouter'
- navigation à l'ensemble de .NET.
Lors de la sélection de l'ensemble, l'erreur se produit.
Après la construction de l'assembly .NET, je parviens à le placer dans le GAC (gacutil), à l'enregistrer dans l'assembly (regasm) et à l'ajouter en tant que composant dans une application COM +.
J'ai essayé de créer le .tlb
avec regasm
et de l'importer, mais la même erreur se produit.
ObjectCache.cs:
using System;
using System.EnterpriseServices;
using System.Runtime.InteropServices;
namespace TestObjectCache
{
[Guid("7B1FEFFD-1569-404F-B7EB-6AAB903B8779")]
[ComVisible(true)]
public interface IObjectCache
{
Boolean GetTrue();
}
[Guid("80C986C4-6B1F-4E3C-9B5E-13943DD1E1FD")]
[ComVisible(true)]
[ProgId("ProgId.ObjectCache")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class ObjectCache:ServicedComponent, IObjectCache
{
public ObjectCache()
{
}
public Boolean GetTrue()
{
return true;
}
}
}
AssemblyInfo.cs:
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationName("Object Cache")]
[assembly: Description("Caches commonly used objects")]
[assembly: ApplicationAccessControl(false)]
Je ne peux pas dire avec certitude, mais un sentiment «gut» sur ce point est que l'espace de noms .NET 'EnterpriseServices' empêche Delphi d'importer sa bibliothèque de types. Si 'EnterpriseServices' n'est pas utilisé, InteropServices est toujours utilisé, puis la bibliothèque de types peut être importée dans Delphi. Peut être dû à une API Windows n'étant pas disponible via 'EnterpriseServices'. Si j'ai le temps de vérifier cela, je mettrai à jour ce post. – ogglethorp
Je viens d'avancer en utilisant InteropServices au lieu de EnterpriseServices. – ogglethorp