Si Modulay, sobre todo el ejecutable, es excesivamente lento
, eso es un problemilla que tiene el labview, sin embargo, el software trabaja con sus hardware a altiiiisimas velocidades de procesamiento/muestreo... por lo q supongo q el hecho de ralentizar tanto el PC será por eso... se lleva una gran cantidad de memoria "palante" para poder operar correctamente... en cualquier caso, si vemos que la cosa no trabaja como debiera intentamos hacer algo en otro lenguaje de programación.
Para usar la DLL hay que utilizar el bloque llamado "Call Library Function Node", en este bloque hay varios parámetros a configurar(haciendo doble click sobre el):
- Library Name or Path: pinchando sobre browse se selecciona la dll
- Function Name: pinchando sobre el menú desplegable se puede seleccionar una de las funciones que exporta la dll, por ejemplo "MPUSBRead"
- Calling Conventions: Se selecciona C (creo que es pq la librería está creada según las características de uso del lenguaje C.........)
- Parameter: Aquí por defecto hay solo uno, que es el que devuelve la función, esta casilla se puede editar para poner el nombre que se quiera, en la parte inferior de esa misma ventana aparece el prototipo de la función, así de un vistazo rápido se puede ver que se le pasa y que devuelve.
Ahora hay que añadir cada uno de los Parametros con los que va a trabajar la función, para ello hay q abrir el .c con el que está creada la .dll o bien abrir el funciones_dll.txt que incluí con el ejemplillo PicUSB, ahí se puede ver el prototipo de la función que queramos importar de la DLL, centrandonos en la función del ejemplo:
Codigo:
///////////////////////////////////////////////////////////////////////////////
// MPUSBRead :
//
// handle - Identifies the endpoint pipe to be read. The pipe handle must
// have been created with MP_READ access attribute.
//
// pData - Points to the buffer that receives the data read from the pipe.
//
// dwLen - Specifies the number of bytes to be read from the pipe.
//
// pLength - Points to the number of bytes read. MPUSBRead sets this value to
// zero before doing any work or error checking.
//
// dwMilliseconds
// - Specifies the time-out interval, in milliseconds. The function
// returns if the interval elapses, even if the operation is
// incomplete. If dwMilliseconds is zero, the function tests the
// data pipe and returns immediately. If dwMilliseconds is INFINITE,
// the function"s time-out interval never elapses.
//
// Note that "input" and "output" refer to the parameter designations in calls
// to this function, which are the opposite of common sense from the
// perspective of an application making the calls.
//
DWORD _MPUSBRead(void* handle, // Input
void* pData, // Output
DWORD dwLen, // Input
DWORD* pLength, // Output
DWORD dwMilliseconds); // Input
Bien en el prototipo se aprecia que devuelve un DWORD (indicando si ha leido (1) ó no (0)), además hay q pasarle el handle de lectura (puntero doble)[este handle lo devuelve la función _MPUSBOpen], hay que pasarle tb un DWORD para indicarle el numero de bytes que va a leer, y pasarte tb otro DWORD para el tiempo entre lecturas. Bien, ahora hay q definir lo q va a devolver... que son punteros a DWORD. Ahora una vez que se tienen claras cada una de las partes que integran al prototipo hay q añadirlas al bloque mediante el botón de Add Parameter, indicando en Type y Data Type lo que indica el prototipo, DWORD equivale a: Type: Numeric, Data Type: U32
Una vez se tienen definidas cada una de las partes del prototipo solo hay que usarlos como si de un lenguaje de programación se tratara... teniendo en cuenta los tipos de datos que se le pasan, y que espera que le sean pasados, y los parámetros que devuelve... quizá el mas complicado de entender sea el del "handle" q despues de varias pruebas y un par de busquedas por google encontré la solución haciendolo como puse en un par de post mas arriba...
Espero que se entienda algo....