25 |
25 |
26 #ifndef NOT_USE_DYNAMIC_LOADING |
26 #ifndef NOT_USE_DYNAMIC_LOADING |
27 #define DLL_CALL(funcname) (* funcname##_driver) |
27 #define DLL_CALL(funcname) (* funcname##_driver) |
28 #define FCT_PTR_INIT =NULL |
28 #define FCT_PTR_INIT =NULL |
29 |
29 |
30 #ifdef WIN32 |
|
31 #define DLSYM(name)\ |
|
32 *(void **) (&_##name) = GetProcAddress(handle, TEXT(#name"_driver"));\ |
|
33 if (name##_driver == NULL) {\ |
|
34 fprintf (stderr, "Error loading symbol %s\n",#name"_driver");\ |
|
35 UnLoadCanDriver(handle);\ |
|
36 return NULL;\ |
|
37 } |
|
38 |
|
39 #else |
|
40 #define DLSYM(name)\ |
30 #define DLSYM(name)\ |
41 *(void **) (&name##_driver) = dlsym(handle, #name"_driver");\ |
31 *(void **) (&name##_driver) = dlsym(handle, #name"_driver");\ |
42 if ((error = dlerror()) != NULL) {\ |
32 if ((error = dlerror()) != NULL) {\ |
43 fprintf (stderr, "%s\n", error);\ |
33 fprintf (stderr, "%s\n", error);\ |
44 UnLoadCanDriver(handle);\ |
34 UnLoadCanDriver(handle);\ |
45 return NULL;\ |
35 return NULL;\ |
46 } |
36 } |
47 #endif |
|
48 |
37 |
49 #else /*NOT_USE_DYNAMIC_LOADING*/ |
38 #else /*NOT_USE_DYNAMIC_LOADING*/ |
50 |
39 |
51 /*Function call is direct*/ |
40 /*Function call is direct*/ |
52 #define DLL_CALL(funcname) funcname##_driver |
41 #define DLL_CALL(funcname) funcname##_driver |
98 LIB_HANDLE LoadCanDriver(char* driver_name) |
84 LIB_HANDLE LoadCanDriver(char* driver_name) |
99 { |
85 { |
100 LIB_HANDLE handle = NULL; |
86 LIB_HANDLE handle = NULL; |
101 char *error; |
87 char *error; |
102 |
88 |
103 #ifdef WIN32 |
|
104 |
89 |
105 if(handle==NULL) |
|
106 { |
|
107 handle = LoadLibrary(driver_name); |
|
108 } |
|
109 |
|
110 if (handle == NULL) { |
|
111 fprintf(stderr,"Error loading Can Driver dll \n"); |
|
112 return -1; |
|
113 } |
|
114 |
|
115 #else |
|
116 if(handle==NULL) |
90 if(handle==NULL) |
117 { |
91 { |
118 handle = dlopen(driver_name, RTLD_LAZY); |
92 handle = dlopen(driver_name, RTLD_LAZY); |
119 } |
93 } |
120 |
94 |
121 if (!handle) { |
95 if (!handle) { |
122 fprintf (stderr, "%s\n", dlerror()); |
96 fprintf (stderr, "%s\n", dlerror()); |
123 return NULL; |
97 return NULL; |
124 } |
98 } |
125 #endif |
|
126 |
99 |
127 /*Get function ptr*/ |
100 /*Get function ptr*/ |
128 DLSYM(canReceive) |
101 DLSYM(canReceive) |
129 DLSYM(canSend) |
102 DLSYM(canSend) |
130 DLSYM(canOpen) |
103 DLSYM(canOpen) |