' schrieb:Klingt ziemlich korrek. Ich würde in sendresponse() auch die Callbackfunktion selber installieren und falls möglich einen weiteren Boolean Parameter vorsehen um diese auch wieder zu deinstallieren.
Rolf Kalbermatter
Hallo Rolf,
du glaubst ja gar nicht, wie sehr du mir geholfen hast :Dunglaublich - es funktioniert fast. d.h. ich mach das jetzt genau so wie besprochen. 
ein problem habe ich aber noch - der event wird in der richtigen frequenz ausgelöst und daten werden übertragen, aber anscheinend wird der Buffer nicht korrekt aktualisiert, d.h. die der string ändert sich nicht. zuerst hatte ich die befürchtung, dass das memcpy bei  abgebrochen wird (da die daten ca. so aussehen 01 41 00 00 09 01..). aber die funktion kopiert ja wirklich alles zum LVbuffer.
die buffer die ich verwende sind ja auch globale variablen in meine dll, deshalb habe ich mir gedacht, dass das schon so passt, oder muss ich von LabVIEW aus einen cstring zeiger mit der gewünschten adresse an meine dll übergeben und dort die daten hineinschreiben?
Danke für die Hilfe 
 
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>// antwrapper.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung.
//
#include "stdafx.h"
#include "stdio.h"
#include "extcode.h" //LabVIEW inlcude
//Definitionen der Laenge für die Buffer
#define EVENT_LAENGE 10
#define RESPONSE_LAENGE 5
//Typendifinitionen für die ANT Funktionen
typedef BOOL (*ptreventfunction)(UCHAR ucChannel, UCHAR ucEvent);
typedef BOOL (*ptrresponsefunction)(UCHAR ucChannel, UCHAR ucMsgId);
typedef void (*ANT_RESPONSE_POINTER)(ptrresponsefunction, UCHAR*);
typedef void (*ANT_EVENT_POINTER)(UCHAR, ptreventfunction, UCHAR*);
//ANT Buffer & Globals
UCHAR aucResponseBuffer[5]={};
UCHAR aucChannelEventBuffer[10]={};
LVUserEventRef *eventref;
LVUserEventRef *responseref;
LStrHandle eventStringHandle;
LStrHandle responseStringHandle;
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent);
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId);
extern "C" __declspec(dllexport) int ANT_LabVIEW_Schnittstelle(LVUserEventRef *eventrefLabVIEW, LVUserEventRef *responserefLabVIEW, UCHAR antChannel)
{
	int ok = 0;
	//Übergaben von den LabVIEWRefs an Globale Variable
	eventref=eventrefLabVIEW;
	responseref=responserefLabVIEW;
	
   //Eventstringhandle Speicher zuweisen
   // Allocate LabVIEW User Event Data
	responseStringHandle=(LStrHandle)DSNewHandle(sizeof(int32)+RESPONSE_LAENGE*sizeo
(UCHAR));
	LStrLen(*responseStringHandle)=RESPONSE_LAENGE;
	eventStringHandle=(LStrHandle)DSNewHandle(sizeof(int32)+EVENT_LAENGE*sizeof(UCHA
));
	LStrLen(*eventStringHandle)=EVENT_LAENGE;
  
   //Zeiger auf die ANT_Funktionen definieren
   ANT_RESPONSE_POINTER ANT_AssignResponseFunction;
   ANT_EVENT_POINTER ANT_AssignChannelEventFunction;
   //ANT_DLL laden
   HINSTANCE hANTdll = LoadLibraryA("ANT_DLL.dll");
   if (hANTdll != NULL){
	   //Pointer auf die Funktionen setzen
	   ANT_AssignResponseFunction = (ANT_RESPONSE_POINTER) GetProcAddress(hANTdll, "_ANT_AssignResponseFunction");
	   ANT_AssignChannelEventFunction = (ANT_EVENT_POINTER) GetProcAddress(hANTdll, "_ANT_AssignChannelEventFunction");
   }
	   //Funktionen aufrufen
	   if(ANT_AssignResponseFunction != NULL  && ANT_AssignChannelEventFunction != NULL)
		{
			ANT_AssignResponseFunction((ptrresponsefunction)ANT_ResponseFunction, aucResponseBuffer);
			ANT_AssignChannelEventFunction(antChannel, (ptreventfunction)ANT_ChannelEventFunction, aucChannelEventBuffer);
			ok=1;
		}
	   else
		  ok=0;
    
   //ANT_DLL freigeben
   FreeLibrary(hANTdll); 
	return ok;
}
//ChannelEventFunction
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent)
{
	//ANT Event Daten --> LabVIEWstring
	
	memcpy((char*)LStrBuf(*eventStringHandle), &ucChannel, 1);
	memcpy((char*)LStrBuf(*eventStringHandle)+1, &ucEvent, 1);
	memcpy((char*)LStrBuf(*eventStringHandle)+2, &aucChannelEventBuffer,strlen(aucChannelEventBuffer)+1);
	 
	 //Stringhandle an LabVIEW
	PostLVUserEvent(*eventref, (void*)&eventStringHandle);
	
	return TRUE;
}
//ResponseFunction
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId)
{
	//ANT Response Daten --> LabVIEWstring
	memcpy((char*)LStrBuf(*responseStringHandle), &ucChannel, 1);
	memcpy((char*)LStrBuf(*responseStringHandle)+1, &ucMsgId, 1);
	memcpy((char*)LStrBuf(*responseStringHandle)+2, &aucResponseBuffer, strlen(aucResponseBuffer)+1);
	
	//Post event to Event structure
	PostLVUserEvent(*responseref,(void*)&responseStringHandle);
	
	return TRUE;
}</div>