Visual Basic.NET - P/Invoke con punteros

 
Vista:

P/Invoke con punteros

Publicado por Borjolujo (1 intervención) el 26/08/2009 09:14:36
Mis conocimientos de C++ son más que limitados, así que os pido un poco de ayuda. Necesitaria crear las llamadas P/Invoke de unas funciones de la API de Garmin Mobile XT (http://developer.garmin.com/mobile/mobile-sdk/) para Visual Basic .NET (Compact Framework 1.1). He podido pasar otras más sencillas, pero esta con punteros y handles me superan. Os dejo la información necesaria:

-- Prototipos de las dos funciones --
QueAPIExport QueErrT16 QueCreatePoint( const QuePointType* point, QuePointHandle* handle );
QueAPIExport QueErrT16 QueRouteToPoint( QuePointHandle point );

-- QueAPIExport --
#define QueAPIExport __declspec(dllimport)

-- QueErrT16 --
typedef uint16 QueErrT16; enum { ... }

-- QuePointType --
typedef struct { ... } QuePointType;

-- QuePointHandle --
typedef uint32 QuePointHandle;

El intento con el que (creo) más me he acercado es el siguiente (al primero pasandole como handle un IntPtr.Zero, no se me ocurrió otra cosa):

<DllImport("QueAPI.dll")> _
Public Shared Function QueCreatePoint(ByRef point As QuePointType, ByRef handle As IntPtr) As QueErrT16
End Function

<DllImport("QueAPI.dll")> _
Public Shared Function QueRouteToPoint(ByVal point As IntPtr) As QueErrT16
End Function


Por si os sirviese de ayuda, os dejo parte del código (C++) de un señor que se ha currado un manejador de la API (http://christian-helle.blogspot.com/2008/02/integrating-with-garmin-mobile-xt.html). Yo querría hacer lo mismo pero en VB.Net:

QuePointType point;
QuePositionDataType position;

memset(&position, 0, sizeof(QuePositionDataType));
position.lat = DecimalDegreesToSemicircles(latitude);
position.lon = DecimalDegreesToSemicircles(longitude);

memset(&point, 0, sizeof(QuePointType));
point.posn = position;

QuePointHandle hPoint;
memset(&hPoint, 0, sizeof(QuePointHandle));

err = QueCreatePoint(&point, &hPoint);
if (err == queErrNone && hPoint != queInvalidPointHandle) {
err = QueRouteToPoint(hPoint);
}

Ya dije que soy un piltrafilla en C++, así que por si acaso os diré que nemset es una función de MEMORY.H y su prototipo es:

void * __cdecl memset(void *, int, size_t);


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

RE:P/Invoke con punteros

Publicado por Damian (824 intervenciones) el 28/08/2009 15:25:44
Te equivocaste de foro, deberias entrar al de Visual C++ .NET. Saludos


http://www.glosario.ar.gs/
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