Je dois implémenter une dll externe pour gérer un periphérique.
L'ouverture du port sur lequel il est connecté se fait par une procédure qui
réclame un pointeur de type char* pointant sur le nom du port ( "COM1:" ...)
et d'un long donnant la vitesse de transmission (9600...).
J'ai déclaré le proc. comme suit :
[DllImport ("xxx.dll")]
unsafe static extern long InitCommunication (char* pt, long bd)
.Ma proc déclare un tableau de char et son pointeur dans un espace "unsafe":
...
unsafe
{
long bd = 9600;
char[] port = new char[] {'C','O','M','1',':'}
fixed (char* Ptr = port)
{
InitCommunication(Ptr,Bd);
}
}
....
L'execution de ce code provoque une erreur "Attempted to read or write
protected memory" dont je n'arrive pas à me débarasser...
Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter en C#
une procédure d'une dll écrite en C/C++ demandant un pointeur de char ..
Je dois implémenter une dll externe pour gérer un periphérique. L'ouverture du port sur lequel il est connecté se fait par une procédure qui réclame un pointeur de type char* pointant sur le nom du port ( "COM1:" ...) et d'un long donnant la vitesse de transmission (9600...). J'ai déclaré le proc. comme suit : [DllImport ("xxx.dll")] unsafe static extern long InitCommunication (char* pt, long bd) .Ma proc déclare un tableau de char et son pointeur dans un espace "unsafe": ... unsafe { long bd = 9600; char[] port = new char[] {'C','O','M','1',':'} fixed (char* Ptr = port) { InitCommunication(Ptr,Bd); } } .... L'execution de ce code provoque une erreur "Attempted to read or write protected memory" dont je n'arrive pas à me débarasser... Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter en C# une procédure d'une dll écrite en C/C++ demandant un pointeur de char .. Merci d'avance...
Bruno
Bonjour B#..,
je pense que ca marchera mieux comme cela :
[DllImport ("xxx.dll")]
static extern long InitCommunication (string pt, int bd)
- ton char* est en réalité un char[], ce qui est l'équivalent d'une string.
- le long du non managé est sur 32bits, comme le int de C#.
Je dois implémenter une dll externe pour gérer un periphérique.
L'ouverture du port sur lequel il est connecté se fait par une
procédure qui
réclame un pointeur de type char* pointant sur le nom du port (
"COM1:" ...)
et d'un long donnant la vitesse de transmission (9600...).
J'ai déclaré le proc. comme suit :
[DllImport ("xxx.dll")]
unsafe static extern long InitCommunication (char* pt, long bd)
.Ma proc déclare un tableau de char et son pointeur dans un espace
"unsafe":
...
unsafe
{
long bd = 9600;
char[] port = new char[] {'C','O','M','1',':'}
fixed (char* Ptr = port)
{
InitCommunication(Ptr,Bd);
}
}
....
L'execution de ce code provoque une erreur "Attempted to read or write
protected memory" dont je n'arrive pas à me débarasser...
Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter
en C#
une procédure d'une dll écrite en C/C++ demandant un pointeur de char
..
Merci d'avance...
Je dois implémenter une dll externe pour gérer un periphérique. L'ouverture du port sur lequel il est connecté se fait par une procédure qui réclame un pointeur de type char* pointant sur le nom du port ( "COM1:" ...) et d'un long donnant la vitesse de transmission (9600...). J'ai déclaré le proc. comme suit : [DllImport ("xxx.dll")] unsafe static extern long InitCommunication (char* pt, long bd) .Ma proc déclare un tableau de char et son pointeur dans un espace "unsafe": ... unsafe { long bd = 9600; char[] port = new char[] {'C','O','M','1',':'} fixed (char* Ptr = port) { InitCommunication(Ptr,Bd); } } .... L'execution de ce code provoque une erreur "Attempted to read or write protected memory" dont je n'arrive pas à me débarasser... Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter en C# une procédure d'une dll écrite en C/C++ demandant un pointeur de char .. Merci d'avance...
Bruno
B#..
Sebastien : UN GRAND MERCI...!!
"Sébastien FERRAND <listes_seb[a]vbmaf.net>" <=?iso-8859-1?Q?Sébastien FERRAND <listes_seb[a]vbmaf.net>?=> a écrit dans le message de news:
Bonjour B#..,
je pense que ca marchera mieux comme cela : [DllImport ("xxx.dll")] static extern long InitCommunication (string pt, int bd)
- ton char* est en réalité un char[], ce qui est l'équivalent d'une string. - le long du non managé est sur 32bits, comme le int de C#.
Je dois implémenter une dll externe pour gérer un periphérique. L'ouverture du port sur lequel il est connecté se fait par une procédure qui réclame un pointeur de type char* pointant sur le nom du port ( "COM1:" ...) et d'un long donnant la vitesse de transmission (9600...). J'ai déclaré le proc. comme suit : [DllImport ("xxx.dll")] unsafe static extern long InitCommunication (char* pt, long bd) .Ma proc déclare un tableau de char et son pointeur dans un espace "unsafe": ... unsafe { long bd = 9600; char[] port = new char[] {'C','O','M','1',':'} fixed (char* Ptr = port) { InitCommunication(Ptr,Bd); } } .... L'execution de ce code provoque une erreur "Attempted to read or write protected memory" dont je n'arrive pas à me débarasser... Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter en C# une procédure d'une dll écrite en C/C++ demandant un pointeur de char .. Merci d'avance...
Bruno
Sebastien : UN GRAND MERCI...!!
"Sébastien FERRAND <listes_seb[a]vbmaf.net>"
<=?iso-8859-1?Q?Sébastien FERRAND <listes_seb[a]vbmaf.net>?=> a
écrit dans le message de news:
e6aa546495198c80efbd1152776@msnews.microsoft.com...
Bonjour B#..,
je pense que ca marchera mieux comme cela :
[DllImport ("xxx.dll")]
static extern long InitCommunication (string pt, int bd)
- ton char* est en réalité un char[], ce qui est l'équivalent d'une
string.
- le long du non managé est sur 32bits, comme le int de C#.
Je dois implémenter une dll externe pour gérer un periphérique.
L'ouverture du port sur lequel il est connecté se fait par une
procédure qui
réclame un pointeur de type char* pointant sur le nom du port (
"COM1:" ...)
et d'un long donnant la vitesse de transmission (9600...).
J'ai déclaré le proc. comme suit :
[DllImport ("xxx.dll")]
unsafe static extern long InitCommunication (char* pt, long bd)
.Ma proc déclare un tableau de char et son pointeur dans un espace
"unsafe":
...
unsafe
{
long bd = 9600;
char[] port = new char[] {'C','O','M','1',':'}
fixed (char* Ptr = port)
{
InitCommunication(Ptr,Bd);
}
}
....
L'execution de ce code provoque une erreur "Attempted to read or write
protected memory" dont je n'arrive pas à me débarasser...
Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter
en C#
une procédure d'une dll écrite en C/C++ demandant un pointeur de char
..
Merci d'avance...
Je dois implémenter une dll externe pour gérer un periphérique. L'ouverture du port sur lequel il est connecté se fait par une procédure qui réclame un pointeur de type char* pointant sur le nom du port ( "COM1:" ...) et d'un long donnant la vitesse de transmission (9600...). J'ai déclaré le proc. comme suit : [DllImport ("xxx.dll")] unsafe static extern long InitCommunication (char* pt, long bd) .Ma proc déclare un tableau de char et son pointeur dans un espace "unsafe": ... unsafe { long bd = 9600; char[] port = new char[] {'C','O','M','1',':'} fixed (char* Ptr = port) { InitCommunication(Ptr,Bd); } } .... L'execution de ce code provoque une erreur "Attempted to read or write protected memory" dont je n'arrive pas à me débarasser... Si quelqu'un a déjà résolu un cas similaire, c'est a dire implémenter en C# une procédure d'une dll écrite en C/C++ demandant un pointeur de char .. Merci d'avance...