Bonjour � toutes et � tous,
J'aimerais savoir si quelqu'un d'entre vous a d�j� r�ussi � instancier sous C++ Builder XE2 des classes export�es depuis une DLL d�velopp�e sous Visual Studio C++ 2010 ?
Merci par avance,
Version imprimable
Bonjour � toutes et � tous,
J'aimerais savoir si quelqu'un d'entre vous a d�j� r�ussi � instancier sous C++ Builder XE2 des classes export�es depuis une DLL d�velopp�e sous Visual Studio C++ 2010 ?
Merci par avance,
Merci Crayon pour les liens, je vais lire tout �a;
J'ai essay� d'utiliser les utilitaires IMPDEF et IMPLIB, mais cela ne fonctionne pas bien, en fait, les 2 formats des fichiers DEF entre Visual Studio C++ et XE2 ne se ressemblent pas trop, du coup, j'avais pens� pour utiliser ces utilitaires, quitte � modifier � la main les fichiers DEF, mais je ne comprend pas comment passer de l'un � l'autre ...:cry:
Apr�s lecture, il s'av�re que la partie "5. Utilisation statique d'une DLL "�trang�re" n'est possible que sur des DLL comportant des m�thodes et non pas des classes ...
J'ai eu affaire � une DLL en Visual aussi voir DLL m�lange export C et C++
j'ai jou� avec implib et tdump
Avec un fichier IMPDEF, j'ai pu g�n�rer un fichier DEF pour retirer les d�corations mais une DLL sans d�coration m'a �t� fournie, je n'ai pas eu besoin de conserver cette bidouille
le mieux pour le moment reste la g�n�ration du fichier LIB par ImpLib mais uniquement pour les fonctions export�es pas pour les classes
le fichier LIB qui est diff�rent entre MS et Borland,
le fichier DEF qui n'est qu'un simple fichier texte, je sais que MS supporte ? dans le nom des fonctions mais pas BCB, j'ignorais que ce fichier pouvait contenir autre chose !
MS ne respecte souvent pas les normes du C++ strict pas plus que BCB et chacun les siennes !
Pour ce qui concerne des classes dans une DLL, j'ai tendance � consid�rer cela comme une mauvaise pratique pour de l'interop�rabilit� car compatible avec presque aucun langage, une DLL doit exporter des API avec des types bien d�fini (id�alement des types Windows) et au besoin des interfaces que l'on utiliserait presque comme du COM
D'ailleurs, je ne pratique pas l'utilisation statique lui pr�f�rant LoadLibrary\GetProcAddress pour un meilleur contr�le du chemin, ne pas avoir une d�pendance permanente mais juste ponctuelle sur un module, ...
J'avais m�moire d'un sujet sur "classes C++ exportables" mais il �tait d�j� de toi, cela ne semble pas fr�quent comme demande !
Toujours la m�me DLL ?
Tu en es l'auteur ?
Es-tu oblig� d'utiliser cette DLL, tu n'as pas d'autres lib qui font la m�me chose mais plus "ouverte"
Pourquoi ne pas faire une DLL Interm�diaire en Visual C++ qui encapsule cette classe dans un objet COM, cela t'�viterait toutes ces mis�res !
A savoir que les BPL c'est justement la variante "classes Delphi exportables" utilis� dans C++Builder et les BPL sont strictement utilisables en Delphi\BCB de m�me version de compilateur
Merci pour tes pr�cisions ShaiLeTroll
Je pense effectivement que nous allons passer par un objet COM, (ou ActiveX), encapsulant les classes d�sir�es. Pour la DLL non, je ne suis pas l'auteur, mais j'ai le source, vu que c'est un projet "Open Source"
Bonjour,
Est-ce que quelqu'un d'entre vous avez des liens expliquant comment utiliser un objet COM en C++ Builder XE2, SVP ? Je ne trouve pas grand chose sur le site d'Embarcadero.
Merci par avance,
Salut, j'imagine que tu as d�j� regarder cette doc, mais je la post ici juste au cas... : Utilisation des contr�les ActiveX
Merci crayon pour le lien, je vais aller voir.
De mon c�t�, j'ai trouv� le lien suivant : http://www.codeproject.com/Articles/...MatureApproach
J'ai test� la partie "C++ Mature Approach: Using an Abstract Interface"; utilisant les principes de la technologie des objets COM, Le projet console sous C++ Builder XE2 compile et se lie correctement, par contre en ex�cution, j'ai "access violation" ... :aie:
A suivre ...
Je pensais que tu voulais faire du COM, mais en effet si tu utilise la technique des classes abstraites (similaire � COM) c'est plus facile.
Je l'ai d�ja fait -pas avec X2, mais je ne vois pas pourquoi �a ne fonctionnarait pas avec X2.
Je suis un peu perdu dans le code de CodeProject, il y a des tas d'autres exemple sur le web.
Les points cl�s sont:
- La gestion de __declspec(dllexport) dans la dll et __declspec(dllimport) dans ton exe
- L'interface doit �tre typ�e cdecl, surtout pas cpp, ni stdcall
- L'interface est abstraite
- Elle mappe les m�thodes publiques de la classe qui est export�e
Le principe est que tu instancie la classe export�e � partir d'une fonction (qui appelle le new dans la dll). Tu as une autre fonction pour le delete.
La fonction New renvoie une instance sur la classe abstraite, et tu peux ainsi acc�der aux m�thodes.
Je te posterais bien un exemple mais je n'ai pas le projet sous la main.
D�s que j'y pense, si j'y pense. D�sol�.
Motc l�s goocgle: c++ export class interface dll
Ce site est bien (pour la partie cpp, mais insuffisant pour le .h):
http://eli.thegreenplace.net/2011/09...es-from-a-dll/
Note dans le .h la fonction factory_func qui fait le new.
Ce qui manque dans le .h c'est la partie sur cdecl pour que factory_func soit 100% compatible CBuilder, et aussi je crois dans la d�claration de l'interface.
C'est quelque chose comme �a:
http://stackoverflow.com/questions/1...s-platform-use
Ok merci yarp pour ces pr�cisions, je regarde tout �a en d�tail ...
Bonjour
cette affirmation est correcte dans le cas d'emploi d'interfaceCitation:
L'interface doit �tre typ�e cdecl, surtout pas cpp, ni stdcall
par contre dans le cas fournis en exemple avec l'emploi de classe
virtuelle
on dois utiliser dans le cas de C++Builder le prefix _ stdcall
le code de la dll devient donc
dans le cas contraire l'instance de la classe export�eCode:
1
2
3
4
5
6
7 extern "C" __declspec(dllexport) IKlass* __stdcall create_klass() { return new MyKlass; // dans le cpp de l'exe la déclaration de l'instance devient typedef IKlass* (__stdcall *iklass_factory)();
devient :_create_klass
cordialement
Bonjour � tous,
Je reviens vers vous concernant mon souci. Nous avons d�cid� d'utiliser un objet COM de type ATL d�velopp� du coup sous Visual Studio 2010.
Par contre, nous avons des probl�mes de performance. Est-ce qu'il y a quelque chose de particulier � faire du c�t� Embarcadero pour "importer une biblioth�que de type" ?
Merci par avance,