2017-04-27 4 views
0

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

Screen shot of error

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)] 
+0

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

+0

Je viens d'avancer en utilisant InteropServices au lieu de EnterpriseServices. – ogglethorp

Répondre

1

Exécutez l'Assemblée via l'outil de Visual Studio Tlbexp.exe pour générer un fichier .tlb, puis importer ce fichier dans Delphi. Sinon, essayez d'utiliser l'option "Import .NET Assembly" de l'importateur au lieu de l'option "Importer une bibliothèque de types".

+0

J'obtiens la même erreur en tentant d'importer le fichier .tlb généré à partir de Tlbexp.exe en tant que fichier .tlb généré à partir de regasm. L'utilisation de "Import .NET Assembly" a également échoué mais cette option n'autorise pas la création du fichier _TLB.pas. – ogglethorp