begin process at 2010 02 10 07:02:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

ActiveX / COM

 > 

Récupération des données d'une fonction d'une dll native


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

Récupération des données d'une fonction d'une dll native

jeudi 19 février 2009 à 15:52:41 | Récupération des données d'une fonction d'une dll native

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 informations du pointeur renvoyé par la fonction décrite ci-dessous:

[

DllImport ( @"MADLL.dll" , EntryPoint = "InitImage" , SetLastError = true , CharSet = CharSet .Auto)]

public static extern unsafe IntPtr InitImage( IntPtr ptrRaw, int width, int height, int resolution, int rank, out IntPtr ptrOut);

Ci-dessous, la structure queje dois récupérer :

[

StructLayout ( LayoutKind .Sequential)]

class

ErrorContext

{

[

MarshalAs ( UnmanagedType .I4)]

public T__FPQC_Returned_Code returnedCode;

[

MarshalAs ( UnmanagedType .LPStr, SizeConst = 100)]

public String errorMessage;

[

MarshalAs ( UnmanagedType .LPStr, SizeConst = 256)]

public String errorFile;

[

MarshalAs ( UnmanagedType .U4)]

public UInt32 errorLine;

}

Mais lors de l'exécution des instructions suivantes :

IntPtr

ptrErr = Marshal .AllocHGlobal( Marshal .SizeOf( typeof ( ErrorContext )));

ptrErr = FPQC_InitFingerprintImage(ptrRaw, bmp.Width, bmp.Height, 500, 1,

out ptrOut);

ErrorContext

eContext = newErrorContext();

Marshal .PtrToStructure(ptrErr, eContext);

j'ai une exception de type " Attempted to read or write protected memory" qui se génère à la dernière ligne.
Je n'arrive donc pas à récupérer les informations contenues dans eContext.

Merci d'avance pour vos éclaircissements!!!
jeudi 19 février 2009 à 16:19:36 | Re : Récupération des données d'une fonction d'une dll native

Lutinore

Administrateur CodeS-SourceS
Salut, faudrait voir le prototype de ta struct en C, je pense que que les chaines de caractères sont des tableaux inline et non des pointeurs.
jeudi 19 février 2009 à 16:29:45 | Re : Récupération des données d'une fonction d'une dll native

maladebe

Salut Lutinore,

Voici le prototype de la structure :

typedef

struct {

T__FPQC_Returned_Codes m__errorcode;

T__Char m__errormessage[150];

T__Char m__errorfile[256];

T__UInt32 m__errorline;

}T__FPQC_Struct_Error_Context;

Alors oui, ce sont bien des tableaux de char mais avec
MarshalAs(UnmanagedType.LPStr, SizeConst = 256)], il devrait pas poser de souci? Enfin je pense.

jeudi 19 février 2009 à 18:33:57 | Re : Récupération des données d'une fonction d'une dll native

Lutinore

Administrateur CodeS-SourceS
 				
[ MarshalAs( UnmanagedType.ByValArray, SizeConst = 256  ) ]
public char[ ] str1; // Attention au CharSet de la struct.
jeudi 19 février 2009 à 18:38:39 | Re : Récupération des données d'une fonction d'une dll native

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !
quoi que ça, c'est mieux :

[ MarshalAs( UnmanagedType.ByValTStr, SizeConst= 256 ) ]
public String str1;
vendredi 20 février 2009 à 07:50:10 | Re : Récupération des données d'une fonction d'une dll native

maladebe

Merci beaucoup Lutinore. Ca marche comme je voulais!!!
Grace à :
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst= 256 ) ]
public String str1;


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


Répondre à ce message

Sujets en rapport avec ce message

Récupérer l'adresse en mémoire de la dll chargée [ par 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'aimera 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;[.. Paramètrage entre deux projets différents [ par dorras7 ] Bonjour, j'ai développé un DLL en c# qui implémente une fonction (par exemple M1(typeofobject val)) puis j'ai testé cette fonction dans un autre proje probléme avec les tableaux [ par don1 ] salut le forum. J'ai développé un usercontrol et maintenant lors de l'utilisation d'une des fonction de ce composants dans mon application j'ai le mes Appel d'une dll avec tableau & structure [ par Morgan_2956 ] Bonjour à tous, Malgré toutes mes recherches et essais, je n'arrive décidément pas à passer des tableaux dans une structure provenant d'une dll. Je do long en long* [ par ybuchheit ] Bonjour, Je dois appeler une fonction écrite en C et provenant d'une dll. Cette fonction prend comme argument un long*. Ma fonction est bien déclarée Dll pour Crystal report [ par 24 ans ] Salut tout le monde,j'ai developpé une dll qui comporte une fonction queje vais l'apeler à partir du Designer du crystal reports (dans la partie Addit Appel de fonction par l'intermédiaire d'une DLL C (problème d'arguments) [ par ScRunCHy ] Bonjour à tous,J'essaie de développer dans le cadre de mon stage une IHM dans laquelle je dois entre autre afficher des images JPEG2000.Il faut que j' 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 Utiliser des dll c++ en C# [ par vanisheur ] Bonjour,J'ai vraiment besoin d'aide.je suis en train d'ecrire un programme en C#, celui-ci utilise des fonctions C++ incluses dans des DLL.Une partie


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 (3)

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