Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema invocando una dll externa Pinvoke, AccessViolationException

Estas en el tema de Problema invocando una dll externa Pinvoke, AccessViolationException en el foro de .NET en Foros del Web. Buenas foreros... Vereis, tengo un problema que no sé resolver, y necesito su ayuda, jeje. No soy programador de C++, pero en mi trabajo, tengo ...
  #1 (permalink)  
Antiguo 17/03/2012, 18:30
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 6 meses
Puntos: 7
Problema invocando una dll externa Pinvoke, AccessViolationException

Buenas foreros...

Vereis, tengo un problema que no sé resolver, y necesito su ayuda, jeje.

No soy programador de C++, pero en mi trabajo, tengo que usar de una libreria en C++ desde mi aplicación C#. El caso es que en teoría hago bien la llamada al método que tengo que utilizar, sin embargo, recibo la siguiente excepción:


Código:
Excepción no controlada del tipo 'System.AccessViolationException' en PruebaRegCompleto.RegCompleto.exe

Información adicional: Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.
He leido en la MSDN que esto puede ser causa de que la librería de código no administrado pueda realizar acceso a punteros de memoria de una forma equivocada, por lo que el problema no estaría en mi app .NET, sino en la librería de C++. Sin embargo... junto con la librería me mandaron una aplicacion de ejemplo, tb. hecha en C++, y ahí si está funcionando bien la librería...

INFO DE LA MSDN

Metodo del codigo C++
Código:
void __stdcall Encriptar(char* Resultado, const char* sCadena)
{
	int iAux = 0;                         
	std::string sSal;                 

	std::ostringstream output;             
	std::istringstream inputHex;           

	std::string sCad(sCadena);
	std::string sCla(m_Clave);

	int LongCadena = sCad.size();
	for(int i = 0; i < LongCadena;i++) 
	{
		iAux = (sCad[i]+sCla[i]) % 256;
		output << std::hex << iAux; 		
                               inputHex.str(output.str());
		output.str(""); 
		sSal += inputHex.str();
	}

	strcpy(Resultado, sSal.c_str());
}

llamada desde mi codigo C#

Código:
        [DllImport("info_decrypter.dll")]
        private extern static void Encriptar(ref string Resultado, ref string sCadena);

        private void button1_Click(object sender, EventArgs e)
        {

            string messagePlain = "this is a message";

            string messageEncrypted = string.Empty;

            string messageDecrypted = string.Empty;


            Encriptar(ref messageEncrypted, ref messagePlain);
        }
__________________
Charlie.

Etiquetas: dll, externa, net, pinvoke, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:36.