Tengo un dll C++ que tiene una función dentro. Estoy intentando llamar desde una aplicación C#.Problema con C# <-> C++ DLLImport "Intentó leer o escribir en la memoria protegida".
Aquí está el código en el archivo de cabecera de C++
extern "C" _declspec(dllexport) int LabelStoringSSDsim(int devNum, UCHAR serial[40], UCHAR wwn[40],
UCHAR ConfigID[5], UCHAR FrmRev[8], UCHAR DevName[40], int eCode);
Aquí está el código en el archivo C++ fuente
int LabelStoringSSDsim(int devNum, UCHAR serialLbl[40], UCHAR wwnLbl[40],
UCHAR ConfigID[5], UCHAR FrmRev[8], UCHAR DevName[40], int eCode)
{
string strConfigID="12111"; //5 bytes
string strFrmRev="1.25...."; //8 bytes
string strDevName="ABC-123................................."; //40 bytes
for (int i=0;i<5;i++)
ConfigID[i] = strConfigID[i];
for (int i=0;i<8;i++)
FrmRev[i] = strFrmRev[i];
for (int i=0;i<40;i++)
DevName[i] = strDevName[i];
return eCode;
}
Aquí está la C# pertinente código
[DllImport("LabelStoring.dll")]
static extern int LabelStoringSSDsim(
int devNum,
byte[] strserial,
byte[] strwwn,
[In] ref byte[] ConfigID,
[In] ref byte[] FrmRev,
[In] ref byte[] DevName,
int eCode);
int errNum = LabelStoringSSDsim(devNum, bserial, bwwn, ref ConfigID, ref FrmRev, ref DevName, 123123);
De modo que cuando llego al último bit de código, aparece el mensaje "Intenté leer o escribir en la memoria protegida". Esto es a menudo una indicación de que otra memoria está dañada." Error.
que no tienen experiencia previa en la importación de DLL de esta manera y he hecho un montón de búsqueda, pero parece que no puede encontrar una solución al problema.
Intenté empezar desde cero con una función simple devolviendo un entero, y funcionó. Luego agregué un int para que pasara a la función y aún así funcionó. Luego agregué una matriz de bytes para pasar, lo que funcionó Luego intenté convertir ese conjunto de bytes en una referencia y falló. Así que mi suposición es que estoy obteniendo los datos incorrectamente.
Cualquier ayuda es muy apreciada.
que produce el error siguiente: Se lanzó la excepción de tipo 'System.ExecutionEngineException'. – Chris
@Chris, creo que tuve un error de sintaxis. Prueba mi nueva versión mejorada arriba. –
Lo sentimos, sigue siendo lo mismo: X - El error se produce en ese último bit de código en lugar del error anterior. – Chris