Debuger une dll c++ en CSHARP

Debuger une dll c++ en CSHARP - C#/.NET managed - Programmation

Marsh Posté le 30-06-2009 à 12:27:38    

Bonjour à tous,
 
je m'explique:
 
J'ai une dll en c++ que j'ai besoin de debuger en CSHARP, mais je ne sais pas trop comment faire.
 
Lorsque que je compile le projet en c++, Visual studio me demande d'exécuter un .exe.
 
Je suppose donc que je dois créer un projet pour pouvoir dans un premier temps lancer le projet...
 
Je suis un peu perdu, quelqu'un'un aurait-il des suggestions?

Reply

Marsh Posté le 30-06-2009 à 12:27:38   

Reply

Marsh Posté le 30-06-2009 à 13:28:47    

Une dll est un fichier comportant un ensemble de fonctions qui seront appelées par un programme client, ce fameux .exe que te réclame Visual Studio. Tu dois donc créer un programme de test, qui appellera la ou les fonctions que tu veux débugger. Une dll toute seule ne sert à rien du tout.

 

Ensuite, que veux tu dire par "débugger en C#" ? Si la dll est écrite en C++, tu verras son source C++ dans le débugger, et rien d'autre.


Message édité par Harkonnen le 30-06-2009 à 13:28:57

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-06-2009 à 14:21:39    

Tout d'abord merci pour cette réponse rapide.
 
En fait je t'explique:
 
- J'ai un certificat client qui se trouve dans un lecteur de carte vital. Ce lecteur est un installé sur un poste( "POSTE 1" ).
 
- Sur un autre poste("POSTE 2" ), où se trouve un site web installé en local, j'ai installé un certificat "père" se trouvant, dans la hiérarchie, au dessus du certificat se trouvant dans la carte.
 
- J'essaye d'accéder au site web du Poste 2 à partir du poste 1 et IIS est censé détecter la validité du certificat se trouvant sur la carte. Le seul problème c'est que les deux certificats ( sur le poste 1 et poste 2 ), n'ont pas le même CA. C'est pour ça que l'on m'a fournit un petit outil qui est censé passé outre ce problème.
 
- Sachant que je suis développeur CSHARP, je souhaiterais débugger ce programme dans ce langage, alors que le petit outil que l'on m'a fournit est en c++, car évidemment il y a un petit soucis dans le programme.
 
J'ai vu qu'il y avait une fonction [DllImport("maDLL.dll" )], mais le problème c'est que je ne sais pas trop comment importer les méthodes et fonctions du projet en c++, car dans un premier temps, dans ce language, les types de variable sont vraiment bizarre.
 

Reply

Marsh Posté le 30-06-2009 à 14:40:34    

custo76 a écrit :


J'ai vu qu'il y avait une fonction [DllImport("maDLL.dll" )], mais le problème c'est que je ne sais pas trop comment importer les méthodes et fonctions du projet en c++, car dans un premier temps, dans ce language, les types de variable sont vraiment bizarre.
 


DllImport permet d'importer dans un programme C# les fonctions d'une dll que tu spécifies. Ce qui suppose que :
- tu connaisses le nom des fonctions,
- tu connaisses le type des variables fournies en entrée, et le type des variables de sortie
Ensuite, qu'appelles tu un "type de variable bizarre" ? Il faut savoir que la conversion des types de variables C++ <=> C# n'a rien de trivial, car il va s'agir de convertir des types non managés en type managés et vice versa. Ca s'appelle le Marshalling : http://msdn.microsoft.com/fr-fr/li [...] S.80).aspx


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-06-2009 à 15:42:19    

Merci pour la réponse.
 
Voici quelques bout de code rempli de variable bizarre:
 

Code :
  1. PCCRL_CONTEXT GetCRLFromStore(__in PCCERT_CONTEXT pCert,
  2.                               __in CRLTypeEnum CRLType,
  3.                               __in PCERT_REVOCATION_INPARA pInPara,
  4.                               __in DWORD MinCrlNumber,
  5.                               __in HCERTSTORE hCrlStore)
  6. {
  7.     PCCRL_CONTEXT pCrl = NULL;
  8.     PCCRL_CONTEXT pValidCrl = NULL;
  9. ....
  10. }
  11. STDAPI DllRegisterServer(void)
  12. {
  13.     return CPSRevRegister(CRYPT_REGISTER_FIRST_INDEX);
  14. }
  15. typedef struct _CERT_REVOCATION_INPARA
  16. {
  17.     // In parameters (from caller application, see CertVerifyRevocation)
  18.     DWORD dwFlags;                                  // Flags from caller
  19.     HCERTSTORE hCrlStore;                           // Store to look for CRLs optionnaly passed in by application
  20.     HCERTSTORE hCrlSignerStore;                     // To be used to look for CRL signer certs, should be user CA store
  21.     LPFILETIME pftTimeToUse;                        // Time to use for revocation check
  22.     DWORD dwUrlRetrievalTimeout;                    // Timeout for URL retrieval
  23.     FILETIME ftAbsUrlRetrievalTimeout;              // Absolute time out - used if timeout is cumulative
  24.     BOOL fCheckFreshnessTime;                       // Retrieve CRL from wire if cached CRL is not fresh enough
  25.     DWORD dwFreshnessTime;                          // What fresh enough is
  26.     LPFILETIME pftCurrentTime;                      // Time to use for freshness
  27.     LPFILETIME pftCacheResync;                      // Cache entries prior to that time are invalidated
  28. } CERT_REVOCATION_INPARA, *PCERT_REVOCATION_INPARA;


 
Plus sérieusement, je vais me penché sur le Marshalling.
 
Encore merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed