1 Dernière modification par Tekilatexee (26/02/2006 22h02m58s)

Sujet : Compatibilité delphi 7 et visual c++ 6.0

Dans le cadre d'une action pro je dois dévellopé une dll en delphi avec delphi 7 qui sera utilisé en c++ avec visual c++ 6.0. Est-ce possible?
Delphi 7 génère des .obj qui en théorie permettent le linkage avec le c++ mais le compileur de visual c++ 6.0 me dit qu'il y a un problème de conversion en COFF car le .obj n'est pas valide.
Comment je peux les linké autrement?

Merci pour vos réponses.

Re : Compatibilité delphi 7 et visual c++ 6.0

Salut,

Je ne connais pas du tout Delphi, donc je laisse le soin à SamRay de répondre.
Mais juste une précision car je n'ai pas compris la phrase :

Dans le cadre une action pro je dois dévellopé une dll en delphi avec delphi 7 qui sera en c++ avec visual c++ 6.0.

Tu fais une DLL en Delphi et tu veux l'attaquer en C++ c'est ça ?

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

Tout d'abord bonjour, et bienvenue !

Je rejoins Cyber sur l'incompréhension de ta première phrase ; il doit y manquer un verbe wink.

Ce que je comprends de ta question, c'est que tu souhaites faire une dll avec Delphi mais que tu devras l'utiliser dans un autre soft écrit en C++ avec VC++.

Je pense que c'est tout à fait possible. Je ne comprends pas trop pourquoi tu cherches à récupérer le .obj de Delphi. Le principe d'une dll, c'est qu'une fois compilée, elle est utilisable par n'importe qu'elle autre programme, quel que soit le langage que tu utilises (pour peu que ce langage possède des fonctions d'accès aux dll bien sûr). Une fois chargée, le programme la voit comme une librairie de fonctions directement utilisables.

Ce qui signifie que, dans l'ordre :
- Tu prends Delphi et tu codes ta dll.
- Tu compiles ton projet pour générer la dll.
- Ceci fait tu reprends ton soft que tu développes sous VC++, tu charges ta dll dans l'initialisation et tu utilises les fonctions que tu y as défini selon le protocole défini en C++ pour l'utilisation des dll (je ne sais pas du tout comment on gère les dll en C++, mais peut être que si dckinou passe, il pourra te renseigner sur ce point wink).

Et c'est tout ! Je ne pense pas que tu ais besoin de gérer un quelconque linkage avec C++. L'utilisation de dll est en fait un #include un peu particulier.

-------------------------------
"Keyboard not detected, press a key to continue..."

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

Si je ne dis pas de bétises tu dois include ta DLL et ensuite déclarer les prototypes des fonctions présentes dans ta DLL.
Ainsi, le langage (C++, VB, C#, ...) la connait comme une fonction interne au programme.
Du moins c'est comme ça que j'ai fait pour attaquer une DLL écrite en C à partir d'un programme en VB6.

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

Salut
Comme j'ai 5 minutes a perdre pendant une compil je vais essayé de te répondre le plus clairement possible avec mes connaissances en C++. Alors je ne connais pas du tout delphi mais on va dire qu'il te produit une dll Windows normale.

Alors je pense que deux solution se propose a toi suivant les fichiers qui te sont générés:

1. Tu as les fichiers .lib (contenant un link sur tes fonctions exportés), .dll (contenant la défintion de toutes tes méthodes) et un .h (contenant le prototype de tes fonctions). Dans ce cas la, rien de plus simple, en C++ tu inclut ton .h, tu ajoute ton .lib a ton projet et le tour est joué, tu devrais avoir un acces a ta dll normale.

2. Tu as qu'un fichier .dll (contenant la défintion de toutes tes méthodes). Dans ce cas, il te faut regarder grace aux outils fourni avec visual le nom des fonctions lors de la création de la dll et utilisé les méthodes LoadLibrary et GetProcAddress pour avoir acces a tes fonctions

Voilà si tu veux de plus ample information, il te fodra déjà répondre à mon post

-------------------------------
L'imbecile cherche toujours à enseigner alors que le sage lui cherche toujours à apprendre....

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

On sent direct le mec qui bosse avec ça wink Très pro tout ça !

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

Et oui dessuite on sens le mec qui y travaille dessus, c'est sur mais actuellement je suis en train de changer de language de prog... Et oui mois Dckinou je vais laisser tomber le C++ enfin partiellement abandonné. Je suis en train de me lancer dans un nouveau projet sur la base du framework windows qui me permettrait d'utilisé : du C++ (y'a des bases a ne jamais perdre), du C++ managé et du C#... et le tout se mixant dans d'inoubrable DLL qui utilise chacune un ou deux languages... Je vous raconte pas le bordel lors de l'ouverture d'un projet déjà créé, on ne sais jamais sur quel language on va tomber ... Ca promet d'etre un sacré bordel mais je m'en sors
Je suis toujours ouvert a répondre au demandeur delphi...

A+

Dckinou

-------------------------------
L'imbecile cherche toujours à enseigner alors que le sage lui cherche toujours à apprendre....

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

Ca à l'air sympa ton truc !! smile

----------------------------------------------------------------------------------------------------------------------------
On peut être intelligent toute sa vie et stupide un instant.

WWW

Re : Compatibilité delphi 7 et visual c++ 6.0

Je confirme kinou va etre le bordel.

On bosse sur du VB6.0 et VB.NET et du C. Le tout mélangé c'est chaud les marrons !!!

Un intellectuel assis va moins loin qu'un con qui marche

Re : Compatibilité delphi 7 et visual c++ 6.0

Enorme merci pour vos réponses.

je n'est pas de .lib je n'est qu'un .obj alors si Deckinou pouvait préciser pour les méthodes LoadLibrary et GetProcAddress ca m'aiderai beaucoup.
Encore merci pour vos réponses...

11

Re : Compatibilité delphi 7 et visual c++ 6.0

Voici la reponse a ta demande :

 
// Definit le protype de ma fonction 
// ici voici le type est : void MaFonction(void)
typdef void (*MOM_PROTO_FONCTION) (void)
// Chargement de la DLL en mémoire à partir de son nom ou emplacement
HMODULE hModule = LoadLibrary(L"MaDll");
if(hModule)
{
         
    // Récuperation de la fonction à partir de son nom d'export
    // Il faut connaitre le prototype de ta fonction
    // ici voici le type de MaFonction : void MaFonction(void)
    MOM_PROTO_FONCTION MaFonction;
    MaFonction = (MOM_PROTO_FONCTION)GetProcAddress(  hModule,  "MaFonction");

    // Appel à MaFonction 
    MaFonction();
        
    // Libération du module
    FreeLibrary(hModule);
}

Voilà en esperant n'avoir rien oublié
bon courage

Dckinou

-------------------------------
L'imbecile cherche toujours à enseigner alors que le sage lui cherche toujours à apprendre....

WWW