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
Répondre
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;
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. –
Le fichier PAS contient-il la déclaration d'interface? –
- 1. Delphi Froze lors de l'enregistrement de la bibliothèque de types
- 2. Bibliothèque de types Excel/Delphi 2009/type de variable incorrecte
- 3. L'énumération IDL ne s'affiche pas dans la bibliothèque de types
- 4. Comment faire un copier-coller dans l'éditeur de bibliothèque de types dans Delphi?
- 5. Modèle non trouvé dans la méthode d'action après l'appel d'une méthode de bibliothèque dans symfony
- 6. VisualStudio/C#: Déboguer la DLL importée
- 7. Méthode statique C# à partir de l'objet
- 8. IListSource ne contient aucune source de données
- 9. Installation de plusieurs versions de bibliothèque dans Delphi/C++ Builder
- 10. Automatiser Visual Studio à partir de Delphi et tirer un élément de projet
- 11. initwithint avertissement, aucune méthode trouvée?
- 12. SSIS - Suggérer des types à partir de la destination
- 13. Chargement de la bibliothèque Dojo à partir d'AOL et des codes Widget à partir de Local?
- 14. Toute bibliothèque complète pour Jabber dans Delphi?
- 15. Quels sont les types de retour .NET autorisés à partir d'une méthode d'objet d'extension XSLT?
- 16. Fonction importée dans Entity Framework Where clause?
- 17. Pourquoi la configuration ne signale aucune bibliothèque GL trouvée lors de la génération du projet rss-glx?
- 18. Affichage de documents (filtrés) à partir d'une bibliothèque dans Sharepoint
- 19. OpenIL (DevIL): Utilisation de ilLoadL à partir de Delphi
- 20. Toute bibliothèque pour les types de données génériques dans C?
- 21. Bibliothèque ssl manquante lors de la connexion à POP3 sur SSL à partir d'un ActiveX développé dans Delphi-7 avec le client indy 9?
- 22. Éviter la diffusion lors du passage d'objets via le code de la bibliothèque (En Delphi)
- 23. Méthode de surcharge avec les types C#
- 24. Exécution de la méthode à partir du balisage
- 25. Retour du tableau à partir de la méthode
- 26. fonction de modèle transmis à la bibliothèque partagée (C++)
- 27. Comparaison de la date Delphi
- 28. dijit.form.FilteringSelect ne présente aucune valeur
- 29. L'utilisation de PSEXEC ne renvoie aucune sortie de la tâche à distance
- 30. Test des types d'index de collection (c'est-à-dire des arguments de la méthode [])
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é. –
Supprimé l'original, car il n'a pas obtenu de réponse, et cela contient la même information. –