2009-08-07 5 views
0

Voici ce que je suis en train de faire: Je dois actuellement ouvrir et utiliser un assembly .NET dans Delphi. L'Assemblée que j'essaie d'utiliser a aussi un ensemble d'objets qu'elle utilise. J'ai été capable d'utiliser regasm pour créer une bibliothèque de types pour l'assemblage principal. J'ai également pu assigner un SN et l'enregistrer avec le GAC. Maintenant, lorsque j'essaie d'importer la bibliothèque de type dans Delphi, après que le fichier pas est créé, aucune méthode n'apparaît dans le fichier pas. Je peux voir des méthodes de création aléatoires, mais aucune des méthodes originales que j'ai créées dans la version C# Je ne peux pas penser à ce que le problème pourrait être à l'origine de l'échec. Des idées?Aucune méthode ne s'affiche à partir de la bibliothèque de types importée dans Delphi

+0

J'ai mis l'Assemblée à ComVisible, j'ai même essayé de placer les différentes méthodes de ComVisible. Cela n'a pas fonctionné. –

+0

Supprimé l'original, car il n'a pas obtenu de réponse, et cela contient la même information. –

Répondre

1

L'ensemble du système COM tourne autour des interfaces. Fondamentalement, vous devrez modifier vos classes dans l'assemblage pour implémenter des interfaces qui contiennent les méthodes que vous souhaitez appeler. Vous pourrez ensuite créer une instance de chaque classe de l'assembly en tant qu'interface à partir de Delphi et appeler les méthodes de cette façon.

Par exemple:

// In the assembly 
public interface IMyInterface 
{ 
    void DoSomething(); 
} 

public class MyImplementingClass : IMyInterface 
{ 
    void DoSomething() 
    { 
     // 
    } 
} 

Maintenant votre fichier PAS sera obtenir une déclaration d'interface comprenant la méthode DoSomething, et un couple GUIDs.

Pour appeler cette méthode de Delphi, vous utiliseriez un code similaire à ceci:

procedure CallDoSomething; 
var 
    hr: HResult; 
    Intf: IMyInterface; 
    TypeLib: ITypeLib; 
begin 
    OLECHECK(LoadRegTypeLib(LIBID_MyAssembly, MyAssemblyMajorVersion, MyAssemblyMinorVersion, 0, TypeLib)); 

    Intf := nil; 
    hr := CoCreateInstance(CLASS_MyImplementingClass, nil, CLSCTX_INPROC_SERVER, IID_IMyInterface, Intf); 
    if Failed(hr) then 
    raise Exception.CreateFmt('Failed to create instance of interface. (%x)', [hr]); 

    Intf.DoSomething(); 
end; 
+0

Je suis allé et a créé un ensemble de test pour mimmic le vôtre. Et le fichier PAS create a les GUID mais n'a pas la méthode DoSomething. –

+0

Le fichier PAS contient-il la déclaration d'interface? –

Questions connexes