Rev 197 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include <windows.h>#include <drsread.h>/* The two macros below are used as error return codes *//* in case the DLL does not load, or is missing one or *//* more functions, respectively. You must define them *//* to whatever values are meaningful for your DLL. */#define kFailedToLoadDLLError ???#define kCouldNotFindFunction ???static HINSTANCE DLLHandle;/* Declare the variables that hold the addresses of the function *//* pointers. */static void (__cdecl *DRSSetMask_Ptr)(int mask);static void (__cdecl *DRSSetTriggerType_Ptr)(int type);static void (__cdecl *DRSSetFrequency_Ptr)(int freq);static void (__cdecl *DRSSetRange_Ptr)(double range);static void (__cdecl *DRSSetTriggerChannel_Ptr)(int channel);static void (__cdecl *DRSSetTriggerDelay_Ptr)(double delay);static void (__cdecl *DRSSetTriggerLevel_Ptr)(double level);static void (__cdecl *DRSSetTriggerPolarity_Ptr)(int polarity);static float *(__cdecl *DRSGetTime_Ptr)(int ch);static float *(__cdecl *DRSGetWave_Ptr)(int ch);static int (__cdecl *DRSInit_Ptr)();static int (__cdecl *DRSRead_Ptr)(int drstimer);static int (__cdecl *DRSEnd_Ptr)();static int (__cdecl *DRSToBuffer_Ptr)(unsigned char *p, int m_evSerial);static int (__cdecl *DRSIsTimeout_Ptr)();static void (__cdecl *DRSSetTimeout_Ptr)();static void (__cdecl *DRSSigInt_Ptr)(int k);/* Load the DLL and get the addresses of the functions */static int LoadDLLIfNeeded(void){if (DLLHandle)return 0;DLLHandle = LoadLibrary("drsread.dll");if (DLLHandle == NULL) {return kFailedToLoadDLLError;}if (!(DRSSetMask_Ptr = (void*) GetProcAddress(DLLHandle, "DRSSetMask")))goto FunctionNotFoundError;if (!(DRSSetTriggerType_Ptr = (void*) GetProcAddress(DLLHandle,"DRSSetTriggerType")))goto FunctionNotFoundError;if (!(DRSSetFrequency_Ptr = (void*) GetProcAddress(DLLHandle,"DRSSetFrequency")))goto FunctionNotFoundError;if (!(DRSSetRange_Ptr = (void*) GetProcAddress(DLLHandle, "DRSSetRange")))goto FunctionNotFoundError;if (!(DRSSetTriggerChannel_Ptr = (void*) GetProcAddress(DLLHandle,"DRSSetTriggerChannel")))goto FunctionNotFoundError;if (!(DRSSetTriggerDelay_Ptr = (void*) GetProcAddress(DLLHandle,"DRSSetTriggerDelay")))goto FunctionNotFoundError;if (!(DRSSetTriggerLevel_Ptr = (void*) GetProcAddress(DLLHandle,"DRSSetTriggerLevel")))goto FunctionNotFoundError;if (!(DRSSetTriggerPolarity_Ptr = (void*) GetProcAddress(DLLHandle,"DRSSetTriggerPolarity")))goto FunctionNotFoundError;if (!(DRSGetTime_Ptr = (void*) GetProcAddress(DLLHandle, "DRSGetTime")))goto FunctionNotFoundError;if (!(DRSGetWave_Ptr = (void*) GetProcAddress(DLLHandle, "DRSGetWave")))goto FunctionNotFoundError;if (!(DRSInit_Ptr = (void*) GetProcAddress(DLLHandle, "DRSInit")))goto FunctionNotFoundError;if (!(DRSRead_Ptr = (void*) GetProcAddress(DLLHandle, "DRSRead")))goto FunctionNotFoundError;if (!(DRSEnd_Ptr = (void*) GetProcAddress(DLLHandle, "DRSEnd")))goto FunctionNotFoundError;if (!(DRSToBuffer_Ptr = (void*) GetProcAddress(DLLHandle, "DRSToBuffer")))goto FunctionNotFoundError;if (!(DRSIsTimeout_Ptr = (void*) GetProcAddress(DLLHandle, "DRSIsTimeout")))goto FunctionNotFoundError;if (!(DRSSetTimeout_Ptr = (void*) GetProcAddress(DLLHandle, "DRSSetTimeout")))goto FunctionNotFoundError;if (!(DRSSigInt_Ptr = (void*) GetProcAddress(DLLHandle, "DRSSigInt")))goto FunctionNotFoundError;return 0;FunctionNotFoundError:FreeLibrary(DLLHandle);DLLHandle = 0;return kCouldNotFindFunction;}/* Glue Code for each of the DLL functions */void DRSSetMask(int mask){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetMask_Ptr)(mask);}void DRSSetTriggerType(int type){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetTriggerType_Ptr)(type);}void DRSSetFrequency(int freq){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetFrequency_Ptr)(freq);}void DRSSetRange(double range){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetRange_Ptr)(range);}void DRSSetTriggerChannel(int channel){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetTriggerChannel_Ptr)(channel);}void DRSSetTriggerDelay(double delay){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetTriggerDelay_Ptr)(delay);}void DRSSetTriggerLevel(double level){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetTriggerLevel_Ptr)(level);}void DRSSetTriggerPolarity(int polarity){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetTriggerPolarity_Ptr)(polarity);}float *DRSGetTime(int ch){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return ???;return (*DRSGetTime_Ptr)(ch);}float *DRSGetWave(int ch){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return ???;return (*DRSGetWave_Ptr)(ch);}int DRSInit(){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return dllLoadError;return (*DRSInit_Ptr)();}int DRSRead(int drstimer){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return dllLoadError;return (*DRSRead_Ptr)(drstimer);}int DRSEnd(){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return dllLoadError;return (*DRSEnd_Ptr)();}int DRSToBuffer(unsigned char *p, int m_evSerial){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return dllLoadError;return (*DRSToBuffer_Ptr)(p, m_evSerial);}int DRSIsTimeout(){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return dllLoadError;return (*DRSIsTimeout_Ptr)();}void DRSSetTimeout(){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSetTimeout_Ptr)();}void DRSSigInt(int k){int dllLoadError;if (dllLoadError = LoadDLLIfNeeded())return;(*DRSSigInt_Ptr)(k);}