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:
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...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.
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); }