begin process at 2012 02 11 18:11:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Autre

 > 

import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll


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

import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll

lundi 19 juillet 2010 à 17:08:07 | import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll

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 indication that other memory has been corrupted".
J'ai besoin d'une aide !!

Déjà, je vous montre la fonction en C avec une structure.

INT16 G_DECL G_DSO_GetWaveDescriptor (const WORD16 DeviceHandle,const char * const TraceIdentifier,WF_DESCRIPTOR * const Descriptor);

typedef struct
{
WORD32 SweepsPerAcq;
double HorizOffset;
char HorizUnit[48];
WORD8 TrigerTimeMinutes;
float AcqVertOffset;
WORD16 WaveSource;
} WF_DESCRIPTOR;

Dans le code C#, voici comment sont déclarées les fonctions de la DLL :

[DllImport("C:/WINDOWS/system32/w32gdso.dll")]
internal static extern Int16 G_DSO_GetWaveDescriptor(short device, string voix, ref WF_DESCRIPTOR Descriptor);

[StructLayout(LayoutKind.Sequential)]
public struct WF_DESCRIPTOR{

[MarshalAs(UnmanagedType.I4)]
public Int32 SweepsPerAcq;

[MarshalAs(UnmanagedType.R8)]
public Double HorizOffset;

[MarshalAs(UnmanagedType.ByValArray,SizeConst = 48)]
public string[] HorizUnit;

[MarshalAs(UnmanagedType.I1)]
public Byte TrigerTimeMinutes;

[MarshalAs(UnmanagedType.R4)]
public Single AcqVertOffset;

[MarshalAs(UnmanagedType.I2)]
public Int16 WaveSource;
}

Appel des fonctions :

WF_DESCRIPTOR DESCRIPTOR = new WF_DESCRIPTOR();
Int16 res = G_DSO_GetWaveDescriptor(0, "C1", ref DESCRIPTOR );


Big merci d'avance !!

lundi 19 juillet 2010 à 17:33:19 | Re : import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll

coq

Administrateur CodeS-SourceS
Bonjour,

A vue de nez je dirais que la déclaration de HorizUnit n'est pas bonne.
Si je ne me trompe pas, la structure C déclare un tableau de 48 chars, pas un tableau de chaines de caractères.

A priori ça donnerait plutot quelque chose de ce genre :

[MarshalAs(UnmanagedType.ByValTStr, SizeConst=48)]
public string HorizUnit;


/*
coq
MVP Visual C#
CoqBlog
*/
lundi 19 juillet 2010 à 17:51:43 | Re : import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll

anbariota

Merci Coq c'est vrai ce que tu as dis mais j'ai eu cet erreur lorsque j'ai mis [MarshalAs(UnmanagedType.ByValTStr, SizeConst=48)]

Cannot marshal field 'BlockFormat' of type 'WF_DESCRIPTOR': Invalid managed/unmanaged type combination (Arrays fields must be paired with ByValArray or SafeArray).

C'est pour ca j'ai utilisé
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 48)]

et C'est pas logique !!


mercredi 21 juillet 2010 à 16:38:03 | Re : import DLL struct Attempted to read or write protected memory. This is often an indication that other memory is corrupt dll

Lutinore

Administrateur CodeS-SourceS
Salut, est-tu sûr d'avoir bien fait comme le propose Coq, il n'utilise pas un champ tableau mais une simple chaine.

Une autre possibilité c'est ByValArray avec un tableau de char et l'attribut CharSet.Ansi pour la fonction.


Cette discussion est classée dans : public, dll, wf, memory, descriptor


Répondre à ce message

Sujets en rapport avec ce message

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 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 dll non libérée (Attempted to read or write protected memory.) [ par mustik2k ] Bonjour,J'ai une page qui utilise une classe C# implémentant une .dll écrite en C de la manière suivante :     //Chargement de la DLL kernel 32 afin d 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 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 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 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++ 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


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 : 1,045 sec (3)

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