Utilisation d'une dll.net en C

thmatew Messages postés 68 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 19 janvier 2010 - 9 mai 2007 à 16:35
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 6 juil. 2007 à 11:06
Bonjour a tous,

Voila mon souci, j'ai besoin d'intégrer une dll.NET en C, j'aimerais savoir comment faire pour utiliser cette dll???!!!!
j'utilise Visual Studio .NET 2003, avant j'utilisai Borland Studio 2006 mais a cause de probleme de licence je ne peut plus l'utiliser.

Merci d'avance pour vos reponse .

6 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
10 mai 2007 à 12:43
Salut,

Le C et le dotnet, c'est quand même des extrèmes : le C est pas objet, et le dotnet n'est pas compiler vers du langage machine. (Pas lors de la production des builds du moins)

Apparment, la solution, ce serait de recompiler ta dll dotnet pour qu'elle ressemble à du COM (dll ActiveX), et il faudrat que tu bosse ton C pour la prise en charge de COM. Je sais pas exactement ce qu'il faut faire, mais tu risque de devoir gérer les compteurs de références des classes COM manuellement. Il doit y avoir des tutos sur le sujet sur le net. (Aucun souci si tu fais du C++ bien sûr)

Pour la dll dotnet en COM, pareil, google et encore google.

Si tu trouve des bons liens, poste les ici, ça peut faciliter la vie des suivants qui auront ce problème (Assez courant).
0
thmatew Messages postés 68 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 19 janvier 2010
10 mai 2007 à 13:14
je reexplique ma question autrement

voila, je me suis mal exprimé, c'est une dll activeX et c du C/C++ que j'utilise, j'arrive a intégrer ma dll ActiveX au projet mais voila ce ke je fais :
#import

"ModbusServer.tlb" //Importation de la bibliotheque de type

int

_tmain(
int argc, _TCHAR* argv[])
{
   
         MODBUSSERVERLib::IModbusSrv mb;   //Implementation de la classe
}

et la il me jette il me dit que la classe est abstraite alor j'utilise un pointeur sur l'interface qui s'appel IModbusSrvPtr mais là il n'y a pas de methode associé comment faire pour utiliser ce pointeur pour avoir toutes les methode contenu dans IModbusSrv???
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
10 mai 2007 à 15:53
Il faut apparement que tu utilise CoCreateInstance, mais je suis pas sûre que ce soit utile vu que tu impoort le tlb...


cf le deuxième code de cette page :


http://blogs.msdn.com/deeptanshuv/archive/2005/06/26/432870.aspx

#include "windows.h"
#include <stdio.h>
#import "CSDll.tlb" named_guids

int main(int argc, char* argv[])
{
    HRESULT hRes = S_OK;
    CoInitialize(NULL);
    CSDll::IMyManagedInterface *pManagedInterface = NULL;

    hRes = CoCreateInstance(CSDll::CLSID_Class1, NULL, CLSCTX_INPROC_SERVER, 
     CSDll::IID_IMyManagedInterface, reinterpret_cast<void**> (&pManagedInterface));


...
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
10 mai 2007 à 23:36
Depuis quand le C n'est pas orienté objet?


En outre MODBUSSERVERLib::IModbusSrv n'est pas du C mais du C++.
Il faut appeler un chat un chat.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 mai 2007 à 10:09
Bah depuis toujours.

Le C est procédural.

On ne peut pas faire de classes en C aussi facilement que l'on en fait en C++. (Le mot clé class est absent du C, on ne peut pas faire d'héritage de la même manière...)

Je suis parti du principe qu'il s'agissait de C vu que thmatew n'a parlé de C++ ni dans son titre, ni dans son premier post. mais sinon, effectivement, il fait au moins en partie du C++ (On peut mélanger les deux dans le même projet sans souci en passant les options qui vont bien au compilo)
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
6 juil. 2007 à 11:06
Désolé d'insister mais
Le C++ est un peu PLUS orienté objet.

Quand t'écris ça c'est un objet ou une déformation de l'esprit:

struct  {
  char *Nom;
  int  QI;
} Membre;

  Membre x;
  x.QI = 60;

Sans évoquer le fait qu'un fichier C est un objet avec ses variables et fonctions privées et publiques (ce qui est déclaré static est privé).
0