begin process at 2010 02 10 02:03:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Mono

 > 

Général

 > 

Récupérer l'adresse en mémoire de la dll chargée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Récupérer l'adresse en mémoire de la dll chargée

lundi 3 mars 2008 à 13:46:25 | Récupérer l'adresse en mémoire de la dll chargée

pcayrol

Bonjour,

Je charge une dll (C++) dynamiquement (avec [U]LoadLibrary[/U]) dans mon programme C#.

J'arrive à invoquer des méthodes, etc, etc...

J'aimerais à présent récupérer l'adresse (de début) où ma dll est chargée en mémoire, j'essaie avec des fonctions de psapi comme suit :


Code csharp :

unsafe public struct MODULEINFO
{
public IntPtr lpBaseOfDll;
public UInt64 SizeOfImage;
public IntPtr EntryPoint;
}

[DllImport("psapi.dll")]
unsafe private static extern Boolean GetModuleInformation(
[In]IntPtr hProcess,
[In]IntPtr hModule,
[Out]MODULEINFO* moduleInfo,
[In]UInt64 tailleModuleInfo
);

[DllImport("Kernel32.dll")]
private static extern IntPtr LoadLibrary(
[In] string lpFileName
);

unsafe public void LoadDll(String nomDLL)
{
if (!_isDllLoaded)
{
_DllHModule = LoadLibrary(CheminDll + nomDLL);
_isDllLoaded = (_DllHModule != IntPtr.Zero);
}

MODULEINFO moduleInfo;

Process currentProcess = Process.GetCurrentProcess();

if (_isDllLoaded)
{
retour = GetModuleInformation(currentProcess.Handle, _DllHModule, &moduleInfo, (UInt64)Marshal.SizeOf(moduleInfo.GetType()));
}
}


et cela ne marche pas, GetModuleInformation me retourne un false... :?

Ai-je bien fait de redéfinir MODULEINFO (en m'inspirant de psapi.h) ?

Voyez vous un bug ?

Ou alors connaissez vous un moyen entièrement C#/.NET de récupérer cette information ?

Merci.

Pascal

Pascal
lundi 3 mars 2008 à 18:01:44 | Re : Récupérer l'adresse en mémoire de la dll chargée

Lutinore

Administrateur CodeS-SourceS
Salut,

DWORD en C# c'est UInt32 pas UInt64..

Oui il faut redefinir MODULEINFO dans ton code C#.

"out MODULEINFO" pas "[ Out ] MODULEINFO*"..

http://www.csharpfr.com/codes/PINVOKE-DYNAMIQUE_36080.aspx
lundi 3 mars 2008 à 19:09:35 | Re : Récupérer l'adresse en mémoire de la dll chargée

pcayrol

Le problème venait du fait que j'ai oublié un StructLayout.Sequential dans la redéfinition de ModuleInfo
Now c'ets bon !

Merci !

Pascal
lundi 3 mars 2008 à 21:03:28 | Re : Récupérer l'adresse en mémoire de la dll chargée

Lutinore

Administrateur CodeS-SourceS
Absolument pas,  StructLayout.Sequential est la disposition par défaut en C# des champs d'une structure. Le problème vient des points que j'ai indiqué plus haut.
mardi 4 mars 2008 à 07:13:45 | Re : Récupérer l'adresse en mémoire de la dll chargée

pcayrol

Ok,

Dès que je suis au boulot ce matin, je poste un copier-coller de ce que j'ai réussi à faire marcher pour vérifier...

Merci encore..

Pascal


Cette discussion est classée dans : récupérer, public, dll, intptr, moduleinfo


Répondre à ce message

Sujets en rapport avec ce message

Récupération des données d'une fonction d'une dll native [ par maladebe ] Salut,Je dois récupérer d'une fonction, dans une dll écrite en C/C++, un pointeur sur une structure. Je pensais avoir trouvé comment récupérer les inf Erreur DeviceIOControl : Fonction Incorrecte [ par tuxama ] Bonsoir,Je tente de récupérer quelques caractéristiques de mon disque physique principal.DeviceIOControl me retourne une erreur '1' : Fonction Incorre Evenement dans une dll [ par sachie ] J'ai voulu ré-up un topic mais apperement les topics résoluent ne remontent pas donc je créé le mien. J'ai une dll et un exe, l'exe appel la dll qu Process WinCE [ par churrros ] Bonjour! Perte d'information IntPtr [ par ScRunCHy ] Salut à tous,J'ai quelques petites difficultés à manipuler ces IntPtr... Dans une classe je déclare un IntPtr :private IntPtr monPtr = IntPtr.Zero;[.. Creer et enregistrer une dll .net pour l'utiliser en ASP [ par Kev33 ] Bonjour,J'essai de creer une dll en .net et de l'enregistrer avec la commande "regsvr32 madll.dll"mais j'ai une erreur : "madll.dll a été chargé mais Pointeurs... Encore et toujours... [ par darknoon29 ] Nous avons toujours quelques difficultés, voilà ce qu'on a écrit:          [DllImport("ordonantsdll.dll")] public static extern System.IntPtr Récupérer un CallBack [ par Oeil_de_taupe ] Bonjour tlm,J'a créé une classe qui permet de mettre une icone dans le systray (avec des API et pas le framework). Mais un problème se pose. J'ai envi DLL Pointeur sur struct [ par kikoff ] ben voila j'ai un gros soucis je dois recuperede la dll une fonction qui renvoit un pointeur sur structureseulement voila comment faire pour recupere


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales