begin process at 2012 02 10 06:02:11
  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;[.. Passer une structure à une DLL en C [ par dark_naruto25 ] Salut à tous ! Voilà mon souci, pour le boulot je dispose d'un DLL (conçu en C) que je dois initialisé depuis mon code C#. Ma structure ressemble à q Dll import [ par doufdouf51 ] J'ai un probléme avec mon code: J'appelle une fonction "Greffon_Start" dans une application en C# qui fait partie d'une dll que j'ai réalisé en C++ import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll [ par anbariota ] Bonjour, J'ai un Outil C# qui importe une DLL C. En effet, j'ai une exception "Attempted to read or write protected memory. This is often an indicatio menu contextuel windows explorer [ par WieWeet ] bonjour, j'ai récupéré ( http://www.codeproject.com/KB/cs/shellContextMenu.aspx ) un exemple qui affiche le menu contextuel de windows explorer. je l' Problem de Controle invisible [ par sheppertizer ] Bonjour a tous voila je suis en train de tester plusieurs système de transparence sur une form , le probleme est que mes controles (ProgressBar et Co


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 2,465 sec (3)

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