Foros del Web » Programación para mayores de 30 ;) » C/C++ »

C++ y C# comunicarlos...

Estas en el tema de C++ y C# comunicarlos... en el foro de C/C++ 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 16/03/2012, 07:03
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
C++ y C# comunicarlos...

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.
Por lo que he leido puede ser a que la librería de C++ esté mal desarrollada... por lo que querría mostrarles el código, para que me dijeran a ver que puede estar dandome problemas, por que yo... no tengo ni idea de código C++. Así que agradecería todo lo que pudieran decirme sobre el tema.

De Antemano... muchas gracias por vuestro tiempo.

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.
  #2 (permalink)  
Antiguo 17/03/2012, 02:02
Avatar de rockbass2560  
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: C++ y C# comunicarlos...

Lo unico que se me ocurre es que las variables

messageEncrypted o messagePlain

estan utilizando alguna zona de memoria protegida por el sistema y tratas de modificarlas...

Saludos, suerte
  #3 (permalink)  
Antiguo 17/03/2012, 18:26
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Respuesta: C++ y C# comunicarlos...

Bueno gracias, pero no parece que sea eso. Por lo que leí en la msdn de microsoft, parece más bien un fallo de la librería C++ que del código .NET.

AccessViolationException

La verdad es que es lo que yo deduzco, pero... no sé ya que más pueda hacer.
__________________
Charlie.
  #4 (permalink)  
Antiguo 21/03/2012, 19:36
 
Fecha de Ingreso: febrero-2008
Ubicación: Leon
Mensajes: 19
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: C++ y C# comunicarlos...

Podrias copiar la funcion y hacer un debug directamente en algun compilador de C++; lo mas seguro es que realmente la funcion este mal desarrollada....

Etiquetas: int, programa, string
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 22:04.