Visual CSharp .NET - Libreria propia en C++ para CSharp

   
Vista:
Imágen de perfil de Noelia

Libreria propia en C++ para CSharp

Publicado por Noelia (4 intervenciones) el 15/06/2015 12:04:16
Buenos días,

He buscado por varias paginas pero no he sido capaz de encontrar que estoy haciendo mal.

Me gustaría decir antes de nada que mis conocimientos sobre CSharp son básicos y sobre las librerías en C también....es decir, me estoy enfrentando a este problema como primer contacto con este lenguaje y esta funcionalidad....además para mejorar la situación debo usar Visual Studio, programa con el que tampoco había trabajado anteriormente.....por lo tanto pido disculpas de antemano por cualquier gazapo que pueda haber cometido.

Después de las disculpas me explico:

- Tenía que realizar un programa para comunicación con cierto equipo. De ese programa, realizado en C++, debía crear una Liberia que pudiera ser utilizada para todo tipo de lenguajes (CSharp, C++, Java...)

- He creado un pequeño programa en CSharp para cargar la librería que he creado y probar que funciona correctamente....evidentemente no lo he conseguido, si no no estaría aquí

Para hacer todo esto básicamente he mirado varias paginas, consultado donde se me ha ocurrido y no he sido capaz de alcanzar una solución por que, como habréis observado, tengo demasiados frentes abiertos que podrían ser los causantes de mi problema.

Adjunto la definición de los métodos que quería utilizar para la librería y la llamada a esta desde CSharp,,,,

* Definición de métodos de la librería:

Definición en el .h
extern "C" __declspec(dllexport) double getYaw();
extern "C" __declspec(dllexport) double getPitch();
extern "C" __declspec(dllexport) double getRoll();
extern "C" __declspec(dllexport) void scanImu();

Definición en el .cpp
bool WINAPI DllMain(HINSTANCE hInst, DWORD dwd, LPVOID lpv)
{
return true;
}

en el main de la liberia:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

* Llamada a la librería desde CSharp
public class ImuINVOKE
{
[DllImport("libreriaImu.dll")]
public static extern void scanImu();
[DllImport("libreriaImu.dll")]
public static extern double getYaw();
[DllImport("libreriaImu.dll")]
public static extern double getPitch();
[DllImport("libreriaImu.dll")]
public static extern double getRoll();
public void scanImu2()
{
scanImu();
}

public double getYaw2()
{
return getYaw();
}

public double getPitch2()
{
return getPitch();
}

public double getRoll2()
{
return getRoll();
}
}

Espero que puedan ayudarme y que la información que proporciono sea suficiente .
Muchas gracias de antemano..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Noelia

Libreria propia en C++ para CSharp

Publicado por Noelia (4 intervenciones) el 16/06/2015 09:56:09
Nadie puede ayudarme?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Libreria propia en C++ para CSharp

Publicado por David (9 intervenciones) el 17/06/2015 10:35:05
A simple vista parece correcto.

¿Qué error te da exactamente?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Libreria propia en C++ para CSharp

Publicado por David (9 intervenciones) el 17/06/2015 18:15:58
Revisando de nuevo tu código, he visto que en C++, en el .cpp no tienes definidas las funciones, solo declaradas en el .h

Te compila la dll sin errores ni advertencias?
Qué versión de VS estás usando?
Has puesto el nombre de las funciones que quieres hacer públicas en el fichero .def del proyecto de la dll?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Noelia

Libreria propia en C++ para CSharp

Publicado por Noelia (4 intervenciones) el 18/06/2015 09:52:17
Hola de nuevo, Si las tengo declaradas pero no lo puse en el mensaje anterior :S

- Cuando creo la Dll me funciona bien y no sale ningún erro ni nada, por eso no se si el problema sera de algo que tiene mal hecho o de la forma de cargarlo en el proyecto de prueba.
- La versión es la VS 2103
- Eso del fichero..........me pillas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Noelia

Libreria propia en C++ para CSharp

Publicado por Noelia (4 intervenciones) el 18/06/2015 09:48:53
Buenos días, Adjunto imagen del error que me aparece
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Libreria propia en C++ para CSharp

Publicado por David (9 intervenciones) el 18/06/2015 15:52:02
El fichero .def es donde se ponen las funciones públicas de una DLL.

Aparte de eso, el error que te da es porque la aplicación del .NET no encuentra la DLL.

Copia la DLL en la carpeta Debug o Release del proyecto del .NET, según cómo estés compilando.

Si sigue sin funcionar, vemos qué está pasando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar