Callback ereignis an labview übergeben

ActiveX, .NET, DLL
Ответить
xhulkx
interested
interested
Сообщения: 1
Зарегистрирован: 16 ноя 2008, 11:25
Версия LabVIEW: 8.5
Контактная информация:

Callback ereignis an labview übergeben

Сообщение xhulkx »

hallo,

ich versuche nun schon seit einiger zeit ein problem zu lösen komm aber nicht und nicht weiter. folgendes will ich machen.

es geht um eine hardware (ant). diese möchte ich in labview nutzen. eine der funktionen (die die mir die daten liefert) benötigt eine callbackfunktion als argument. soweit so gut. die hardware benutzt diese callbackfunktion und die angegebenen buffer jedes mal, wenn eine übertragung statt findet.

ich wollte also nichts anderes tun, eine wrapper schreiben, die benötigte funktion von der hersteller dll laden, an diese funktion eine LVUsereventref übergeben und so die kommunikation zwischen labview und meiner dll herstellen.

wie ihr euch denken könnt funktioiert das nicht :cantbe:

folgenden code habe ich geschreiben:

Код: Выделить всё

// antwrapper.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung.
//

#include "stdafx.h"
#include "stdio.h"
#include "extcode.h" //labview inlcude

//Typendifinitionen für die ANT Funktionen
typedef BOOL (*ptreventfunction)(LVUserEventRef*);
typedef BOOL (*ptrresponsefunction)(LVUserEventRef*);

typedef void (*ANT_RESPONSE_POINTER)(ptrresponsefunction, UCHAR*);
typedef void (*ANT_EVENT_POINTER)(UCHAR, ptreventfunction, UCHAR*);

//Zeiger auf die ANT_Funktionen definieren
static ANT_RESPONSE_POINTER ANT_AssignResponseFunction = NULL;
static ANT_EVENT_POINTER ANT_AssignChannelEventFunction = NULL;

//ANT Buffer
UCHAR aucResponseBuffer[10];
UCHAR aucChannelEventBuffer[10];
char eventbuffer[10];

void PopulateStringHandle(LStrHandle lvStringHandle,char* stringData);
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent);
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId);

static LVUserEventRef *eventref;
static LVUserEventRef *responseref;


extern "C" __declspec(dllexport) BOOL sendevent(LVUserEventRef *eventref)
{
	
	strcpy((char*)&eventbuffer,(const char*)&aucChannelEventBuffer);
	LStrHandle eventstringhandle;
	//Allocate memory for a LabVIEW string handle using LabVIEW's
	//memory manager functions.
	eventstringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
	PopulateStringHandle(eventstringhandle,(char*)&eventbuffer);
	PostLVUserEvent(*eventref, (void *)&eventstringhandle);
	return TRUE;

}

extern "C" __declspec(dllexport) BOOL sendresponse(LVUserEventRef *responseref)
{

	LStrHandle responsestringhandle;
	//Allocate memory for a LabVIEW string handle using LabVIEW's
	//memory manager functions.
	responsestringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
	PopulateStringHandle(responsestringhandle,"Hallo");
	PostLVUserEvent(*responseref, (void *)&responsestringhandle);
	return TRUE;
}
extern "C" __declspec(dllexport) int ANT_DLL_Load(void)
{
   HINSTANCE hANTdll = LoadLibraryA("ANT_DLL.dll");
   if (hANTdll == NULL)

   ANT_AssignResponseFunction = (ANT_RESPONSE_POINTER) GetProcAddress(hANTdll, "ANT_AssignResponseFunction");
   ANT_AssignChannelEventFunction = (ANT_EVENT_POINTER) GetProcAddress(hANTdll, "ANT_AssignChannelEventFunction");

   if (ANT_AssignResponseFunction == NULL)
      return 0;
   if (ANT_AssignChannelEventFunction == NULL)
      return 0;
   else
	  return 1;
}

/*//ChannelEventFunction
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent)
{
	LStrHandle eventstringhandle;
	//Allocate memory for a LabVIEW string handle using LabVIEW's
	//memory manager functions.
	eventstringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
	PopulateStringHandle(eventstringhandle,"Hallo");
	PostLVUserEvent(*eventref, (void *)&eventstringhandle);
	return TRUE;
}

//ResponseFunction - hier wollte ich nur schauen ob die callbackfunktion auslöst
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId)
{
	LStrHandle responsestringhandle;
	//Allocate memory for a LabVIEW string handle using LabVIEW's
	//memory manager functions.
	responsestringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
	PopulateStringHandle(responsestringhandle,"Test");
	PostLVUserEvent(*responseref, (void *)&responsestringhandle);
	return TRUE;
}
*/

extern "C" __declspec(dllexport) int functioncaller(UCHAR antChannel)
{
    if(ANT_AssignResponseFunction != NULL  && ANT_AssignChannelEventFunction != NULL)
	{
		ANT_AssignResponseFunction(&sendresponse, aucResponseBuffer);
		ANT_AssignChannelEventFunction(antChannel, &sendevent, aucChannelEventBuffer);
		return 1;
	}
	
	return 0;
}

void PopulateStringHandle(LStrHandle lvStringHandle,char* stringData)
{
	//Empties the buffer
	memset(LStrBuf(*lvStringHandle),'\0',256);
	
	//Fills the string buffer with stringData
	sprintf((char*)LStrBuf(*lvStringHandle),"%s",stringData);
	
	//Informs the LabVIEW string handle about the size of the size
	LStrLen(*lvStringHandle)=strlen(stringData);
	
	return;
}
bitte, falls mir jemand helfen kann lasst es mich wissen, denn ich bin echt schon am verzweifeln. oder wenn jemand interesse hat sowas zu programmieren lasst es mich auch wissen.

lg
xhulkx

ps.: anleitung vom hersteller: http://www.thisisant.com/images/Resourc ... 202.12.pdf
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: callback ereignis an labview übergeben

Сообщение Eugen Graf »

Wie machst du den Aufruf der DLL in :labview: ?

Insbesondere interessiert mich die Registerkarte "Callbacks" im Call Library Function Node.
jg69

Professionalism
developer
developer
Сообщения: 265
Зарегистрирован: 14 окт 2008, 00:09
Награды: 1
Версия LabVIEW: 8.x, 20x

Re: callback ereignis an labview übergeben

Сообщение jg69 »

Hallo,

mein Tip: poste diese Frage doch mal auf LabVIEWforum.de (natürlich mit Querverweisen auf diesen Thread). Da sind immer wieder einige DLL-Spezialisten unterwegs (z.B. rolfk), die dir mit großer Wahrscheinlichkeit weiterhelfen können.

Gruß, Jens
Tschirno
interested
interested
Сообщения: 1
Зарегистрирован: 21 апр 2009, 11:02
Версия LabVIEW: 8.5
Контактная информация:

Re: Callback ereignis an labview übergeben

Сообщение Tschirno »

Schau doch mal auf

Creating a Notify Icon Using .NET Framework 2.0
http://zone.ni.com/devzone/cda/epd/p/id/3915

da gibts jede Menge mit Callback events

:de: :super:
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Kommunikation mit Applikationen»