• Viernes 15 de Noviembre de 2024, 11:55

Autor Tema:  Interoperabilidad c++ c#  (Leído 1189 veces)

josecarlosgm

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Interoperabilidad c++ c#
« en: Martes 3 de Noviembre de 2009, 11:32 »
0
Hola a todos,

tengo una dll que publica una interfaz con dos métodos para poder ser usados desde otra librería realizada en c++.

El problema que tengo es que con uno de ellos funciona correctamente y con el otro directamente no hace ni caso y se salta la línea sin dar ningún error.

Este es el código de la dll de c#:

namespace ManagedDLL
{
// Interface declaration.
[Guid("1D2DD075-8911-4589-B772-E7F05000CC09")]
public interface IRasSPFdlg
{
int Datos(string Conexion, out string Usuario, out string Pass);
int Propiedades(ref string Modem, ref string Telefono);
};



// Interface implementation.
[ClassInterface(ClassInterfaceType.None)]
[Guid("A0E1695F-D85A-49ee-AD7A-D4C7105CAD32")]
public class ManagedClass : IRasSPFdlg
{


public int Datos(string Conexion, out string Usuario, out string Pass)
{

........ CODIGO DE LA FUNCIÓN


}



public int Propiedades(ref string Modem, ref string Telefono)
{
........ CODIGO DE LA FUNCIÓN

}

Este es el código de la llamada c++:

ESTE ES EL QUE FUNCIONA:

extern "C" long __declspec (dllexport) __stdcall RasCustomNetDLG(BSTR Conexion, BSTR *Usuario, BSTR *Password)
{

long lResult = 0;
HRESULT hr = CoInitialize(NULL);
ManagedDll::IRasSPFdlgPtr pICalc(__uuidof(ManagedDll::ManagedClass));

pICalc->Datos(Conexion, Usuario, Password, &lResult);
CoUninitialize();

return lResult;

}
ESTE, IDENTICO, ES EL QUE NO FUNCIONA:

extern "C" long __declspec (dllexport) __stdcall RasCustomNetProp(BSTR *Modem, BSTR *Telefono)
{

long lResult = 0;
HRESULT hr = CoInitialize(NULL);
ManagedDll::IRasSPFdlgPtr pIRasSPF(__uuidof(ManagedDll::ManagedClass));
pIRasSPF->Propiedades(Modem, Telefono, &lResult);

lResult = pIRasSPF->Propiedades(Modem, Telefono); Este es el código del que pasa y simplemente salta a la siguiente línea

CoUninitialize();

return lResult;



}
}




}