浏览代码

Add EXPORT to exported functions.
Fix EXXX values defined in Microsoft C Runtime 10

oldfaber 12 年之前
父节点
当前提交
ce0bdfbb9e
共有 5 个文件被更改,包括 82 次插入56 次删除
  1. 2 0
      src/modbus-data.c
  2. 2 0
      src/modbus-rtu-private.h
  3. 6 6
      src/modbus-rtu.h
  4. 17 6
      src/modbus-tcp.h
  5. 55 44
      src/modbus.h

+ 2 - 0
src/modbus-data.c

@@ -25,6 +25,8 @@
 #include <string.h>
 #include <assert.h>
 
+#include "modbus.h"
+
 /* Sets many bits from a single byte value (all 8 bits of the byte value are
    set) */
 void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value)

+ 2 - 0
src/modbus-rtu-private.h

@@ -42,7 +42,9 @@
 #define _MODBUS_RTU_TIME_BETWEEN_RTS_SWITCH 10000
 
 #if defined(_WIN32)
+#if !defined(ENOTSUP)
 #define ENOTSUP WSAEOPNOTSUPP
+#endif
 
 /* WIN32: struct containing serial handle and a receive buffer */
 #define PY_BUF_SIZE 512

+ 6 - 6
src/modbus-rtu.h

@@ -28,21 +28,21 @@ MODBUS_BEGIN_DECLS
  */
 #define MODBUS_RTU_MAX_ADU_LENGTH  256
 
-modbus_t* modbus_new_rtu(const char *device, int baud, char parity,
-                         int data_bit, int stop_bit);
+EXPORT modbus_t* modbus_new_rtu(const char *device, int baud, char parity,
+                                int data_bit, int stop_bit);
 
 #define MODBUS_RTU_RS232 0
 #define MODBUS_RTU_RS485 1
 
-int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode);
-int modbus_rtu_get_serial_mode(modbus_t *ctx);
+EXPORT int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode);
+EXPORT int modbus_rtu_get_serial_mode(modbus_t *ctx);
 
 #define MODBUS_RTU_RTS_NONE   0
 #define MODBUS_RTU_RTS_UP     1
 #define MODBUS_RTU_RTS_DOWN   2
 
-int modbus_rtu_set_rts(modbus_t *ctx, int mode);
-int modbus_rtu_get_rts(modbus_t *ctx);
+EXPORT int modbus_rtu_set_rts(modbus_t *ctx, int mode);
+EXPORT int modbus_rtu_get_rts(modbus_t *ctx);
 
 MODBUS_END_DECLS
 

+ 17 - 6
src/modbus-tcp.h

@@ -26,11 +26,22 @@ MODBUS_BEGIN_DECLS
 #if defined(_WIN32) && !defined(__CYGWIN__)
 /* Win32 with MinGW, supplement to <errno.h> */
 #include <winsock2.h>
+#if !defined(ECONNRESET)
 #define ECONNRESET   WSAECONNRESET
+#endif
+#if !defined(ECONNREFUSED)
 #define ECONNREFUSED WSAECONNREFUSED
+#endif
+#if !defined(ETIMEDOUT)
 #define ETIMEDOUT    WSAETIMEDOUT
+#endif
+#if !defined(ENOPROTOOPT)
 #define ENOPROTOOPT  WSAENOPROTOOPT
 #endif
+#if !defined(EINPROGRESS)
+#define EINPROGRESS  WSAEINPROGRESS
+#endif
+#endif
 
 #define MODBUS_TCP_DEFAULT_PORT   502
 #define MODBUS_TCP_SLAVE         0xFF
@@ -40,13 +51,13 @@ MODBUS_BEGIN_DECLS
  */
 #define MODBUS_TCP_MAX_ADU_LENGTH  260
 
-modbus_t* modbus_new_tcp(const char *ip_address, int port);
-int modbus_tcp_listen(modbus_t *ctx, int nb_connection);
-int modbus_tcp_accept(modbus_t *ctx, int *socket);
+EXPORT modbus_t* modbus_new_tcp(const char *ip_address, int port);
+EXPORT int modbus_tcp_listen(modbus_t *ctx, int nb_connection);
+EXPORT int modbus_tcp_accept(modbus_t *ctx, int *socket);
 
-modbus_t* modbus_new_tcp_pi(const char *node, const char *service);
-int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection);
-int modbus_tcp_pi_accept(modbus_t *ctx, int *socket);
+EXPORT modbus_t* modbus_new_tcp_pi(const char *node, const char *service);
+EXPORT int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection);
+EXPORT int modbus_tcp_pi_accept(modbus_t *ctx, int *socket);
 
 MODBUS_END_DECLS
 

+ 55 - 44
src/modbus.h

@@ -34,6 +34,17 @@
 
 #include "modbus-version.h"
 
+#if defined(_WIN32)
+# if defined(DLLBUILD)
+/* define DLLBUILD when building the DLL */
+#  define EXPORT __declspec(dllexport)
+# else
+#  define EXPORT __declspec(dllimport)
+# endif
+#else
+# define EXPORT
+#endif
+
 #ifdef  __cplusplus
 # define MODBUS_BEGIN_DECLS  extern "C" {
 # define MODBUS_END_DECLS    }
@@ -143,57 +154,57 @@ typedef enum
     MODBUS_ERROR_RECOVERY_PROTOCOL      = (1<<2),
 } modbus_error_recovery_mode;
 
-int modbus_set_slave(modbus_t* ctx, int slave);
-int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery);
-void modbus_set_socket(modbus_t *ctx, int socket);
-int modbus_get_socket(modbus_t *ctx);
+EXPORT int modbus_set_slave(modbus_t* ctx, int slave);
+EXPORT int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery);
+EXPORT void modbus_set_socket(modbus_t *ctx, int socket);
+EXPORT int modbus_get_socket(modbus_t *ctx);
 
-void modbus_get_response_timeout(modbus_t *ctx, struct timeval *timeout);
-void modbus_set_response_timeout(modbus_t *ctx, const struct timeval *timeout);
+EXPORT void modbus_get_response_timeout(modbus_t *ctx, struct timeval *timeout);
+EXPORT void modbus_set_response_timeout(modbus_t *ctx, const struct timeval *timeout);
 
-void modbus_get_byte_timeout(modbus_t *ctx, struct timeval *timeout);
-void modbus_set_byte_timeout(modbus_t *ctx, const struct timeval *timeout);
+EXPORT void modbus_get_byte_timeout(modbus_t *ctx, struct timeval *timeout);
+EXPORT void modbus_set_byte_timeout(modbus_t *ctx, const struct timeval *timeout);
 
-int modbus_get_header_length(modbus_t *ctx);
+EXPORT int modbus_get_header_length(modbus_t *ctx);
 
-int modbus_connect(modbus_t *ctx);
-void modbus_close(modbus_t *ctx);
+EXPORT int modbus_connect(modbus_t *ctx);
+EXPORT void modbus_close(modbus_t *ctx);
 
-void modbus_free(modbus_t *ctx);
+EXPORT void modbus_free(modbus_t *ctx);
 
-int modbus_flush(modbus_t *ctx);
-void modbus_set_debug(modbus_t *ctx, int boolean);
+EXPORT int modbus_flush(modbus_t *ctx);
+EXPORT void modbus_set_debug(modbus_t *ctx, int boolean);
 
-const char *modbus_strerror(int errnum);
+EXPORT const char *modbus_strerror(int errnum);
 
-int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);
-int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);
-int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
-int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
-int modbus_write_bit(modbus_t *ctx, int coil_addr, int status);
-int modbus_write_register(modbus_t *ctx, int reg_addr, int value);
-int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data);
-int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data);
-int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb,
-                                    const uint16_t *src, int read_addr, int read_nb,
-                                    uint16_t *dest);
-int modbus_report_slave_id(modbus_t *ctx, uint8_t *dest);
+EXPORT int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);
+EXPORT int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest);
+EXPORT int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
+EXPORT int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
+EXPORT int modbus_write_bit(modbus_t *ctx, int coil_addr, int status);
+EXPORT int modbus_write_register(modbus_t *ctx, int reg_addr, int value);
+EXPORT int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data);
+EXPORT int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data);
+EXPORT int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb,
+                                           const uint16_t *src, int read_addr, int read_nb,
+                                           uint16_t *dest);
+EXPORT int modbus_report_slave_id(modbus_t *ctx, uint8_t *dest);
 
-modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status,
-                                     int nb_holding_registers, int nb_input_registers);
-void modbus_mapping_free(modbus_mapping_t *mb_mapping);
+EXPORT modbus_mapping_t* modbus_mapping_new(int nb_coil_status, int nb_input_status,
+                                            int nb_holding_registers, int nb_input_registers);
+EXPORT void modbus_mapping_free(modbus_mapping_t *mb_mapping);
 
-int modbus_send_raw_request(modbus_t *ctx, uint8_t *raw_req, int raw_req_length);
+EXPORT int modbus_send_raw_request(modbus_t *ctx, uint8_t *raw_req, int raw_req_length);
 
-int modbus_receive(modbus_t *ctx, uint8_t *req);
-int modbus_receive_from(modbus_t *ctx, int sockfd, uint8_t *req);
+EXPORT int modbus_receive(modbus_t *ctx, uint8_t *req);
+EXPORT int modbus_receive_from(modbus_t *ctx, int sockfd, uint8_t *req);
 
-int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp);
+EXPORT int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp);
 
-int modbus_reply(modbus_t *ctx, const uint8_t *req,
-                 int req_length, modbus_mapping_t *mb_mapping);
-int modbus_reply_exception(modbus_t *ctx, const uint8_t *req,
-                           unsigned int exception_code);
+EXPORT int modbus_reply(modbus_t *ctx, const uint8_t *req,
+                        int req_length, modbus_mapping_t *mb_mapping);
+EXPORT int modbus_reply_exception(modbus_t *ctx, const uint8_t *req,
+                                  unsigned int exception_code);
 
 /**
  * UTILS FUNCTIONS
@@ -209,12 +220,12 @@ int modbus_reply_exception(modbus_t *ctx, const uint8_t *req,
         tab_int8[(index) + 1] = (value) & 0xFF; \
     } while (0)
 
-void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value);
-void modbus_set_bits_from_bytes(uint8_t *dest, int index, unsigned int nb_bits,
-                                const uint8_t *tab_byte);
-uint8_t modbus_get_byte_from_bits(const uint8_t *src, int index, unsigned int nb_bits);
-float modbus_get_float(const uint16_t *src);
-void modbus_set_float(float f, uint16_t *dest);
+EXPORT void modbus_set_bits_from_byte(uint8_t *dest, int index, const uint8_t value);
+EXPORT void modbus_set_bits_from_bytes(uint8_t *dest, int index, unsigned int nb_bits,
+                                       const uint8_t *tab_byte);
+EXPORT uint8_t modbus_get_byte_from_bits(const uint8_t *src, int index, unsigned int nb_bits);
+EXPORT float modbus_get_float(const uint16_t *src);
+EXPORT void modbus_set_float(float f, uint16_t *dest);
 
 #include "modbus-tcp.h"
 #include "modbus-rtu.h"