[Pyrex] Re: Pyrex Header Wrapping

Adam McCarthy frostbite.adam at gmail.com
Thu Sep 9 19:22:44 CEST 2004


I am currently wrapping the current header to implement a barcode
scanner SDK in a python program.  I am currently stuck with the
following error:

ScanAPI.pyx:39:38: C function definition not allowed here

But afaik, I am not defining a function.

This is the original C header:

/**************************************************************************************

 Copyright (C) 1999 by Socket Communications, All Rights Reserved.

 MODULE:		ScanAPI.h

 PURPOSE:		Include file for the Socket Scanner API.
				
 DESCRIPTION:	Currently supports only one scanner.		
				
 COMMENTS:		Initial coding on 9/2/99 by Gary Cuevas
			
****************************************************************************************/


#ifdef SCANAPI_EXPORTS
#define SCANAPI_API __declspec(dllexport)
#else
#define SCANAPI_API __declspec(dllimport)
#endif


#ifdef __cplusplus
  extern "C" {
#endif

// Types of Socket Scanner products

enum SCANNER_TYPE {SCANNER_NONE = 0,		// no scanner
				   SCANNER_CFCARD,			// Socket In-Hand Scan Card
				   SCANNER_WAND,			// a wand
				   SCANNER_GUN};			// a gun

// Types of good-read sounds

enum GRS_TYPE {GRS_NONE = 0,	// no good read sound
			   GRS_MESSAGEBEEP,	// play MessageBeep(0) on good read
			   GRS_WAVFILE};	// play user-supplied .WAV file on good read

// Scanner device information structure

typedef struct tagSCANDEVINFO{
	DWORD			StructSize;					// size of the structure
	SCANNER_TYPE	ScannerType;				// gun, wand, or integrated card
	unsigned int	fHardwareTrigger :1;		// most likely a gun
	unsigned int	fSoftwareTrigger :1;		// most likely an integrated card
	unsigned int	fSoftwareAbortTrigger :1;	// most likely an integrated card
	unsigned int	fGoodReadLight :1;			// most likely a gun
	unsigned int	fGoodReadSound :1;			// most likely a gun
	TCHAR			SymbolType;					// Symbol type code from ISC scanner
} SCANDEVINFO, *LPSCANDEVINFO;

// API return codes

enum SCAN_RESULT {SR_SUCCESS = 0,
				  SR_INVALID_WMINSERTION,
				  SR_INVALID_WMREMOVAL,
				  SR_PLUG_THREAD_FAILURE,
				  SR_DEVICE_THREAD_FAILURE,
				  SR_INVALID_SCANNER_HANDLE,
				  SR_OPEN_FAILURE,
				  SR_INVALID_WMSCANNERDATA,
				  SR_NO_DATA,
				  SR_BUFFER_TOO_SMALL,
				  SR_SCANNER_NOT_OPEN,
				  SR_INVALID_SOUND_TYPE,
				  SR_WAVFILE_NOT_FOUND,
				  SR_MEMORY_FAILURE,
				  SR_INVALID_ERR,
				  SR_TOO_MANY_USERS,
				  SR_TOO_MANY_ATTEMPTS,
				  SR_NOT_INITIALIZED,
				  SR_DEVICE_FAILURE,
				  SR_INTERNAL_FAILURE,
				  SR_INVALID_STRUCTURE,
				  SR_HOTSWAP_ERROR
				  }; // Load Library call to load the drvr module failed

// API function prototypes

SCANAPI_API SCAN_RESULT WINAPI ScanInit(HWND hWnd, UINT wmInsertion,
UINT wmRemoval);
SCANAPI_API SCAN_RESULT WINAPI ScanOpenDevice(HANDLE hScanner);
SCANAPI_API SCAN_RESULT WINAPI ScanCloseDevice(HANDLE hScanner);
SCANAPI_API SCAN_RESULT WINAPI ScanGetDevInfo(HANDLE hScanner,
LPSCANDEVINFO lpScanDevInfo);
SCANAPI_API SCAN_RESULT WINAPI ScanRequestDataEvents(HANDLE hScanner,
HWND hWnd, UINT wmScannerData);
SCANAPI_API SCAN_RESULT WINAPI ScanTrigger(HANDLE hScanner);
SCANAPI_API SCAN_RESULT WINAPI ScanAbort(HANDLE hScanner);
SCANAPI_API SCAN_RESULT WINAPI ScanGetData(HANDLE hScanner, TCHAR *
lpBuff, LPINT BufSize);
SCANAPI_API SCAN_RESULT	WINAPI ScanSetGoodReadSound(HANDLE hScanner,
GRS_TYPE Sound, LPCTSTR lpWavFile);
SCANAPI_API SCAN_RESULT WINAPI ScanDeinit(void);
SCANAPI_API SCAN_RESULT WINAPI ScanErrToText(SCAN_RESULT Err, LPTSTR
lpBuff, LPINT BufSize);

#ifdef __cplusplus
  }
#endif

============================================================

And this is my wrapper:

cdef extern from "stdafx.h":
    ctypedef unsigned long   DWORD
    ctypedef unsigned short  BOOL
    ctypedef unsigned short  BYTE
    ctypedef unsigned short  WORD
    ctypedef float           FLOAT
    ctypedef FLOAT           *PFLOAT
    ctypedef BOOL            *PBOOL
    ctypedef BOOL            *LPBOOL
    ctypedef BYTE            *PBYTE
    ctypedef BYTE            *LPBYTE
    ctypedef int             *PINT
    ctypedef int             *LPINT
    ctypedef WORD            *PWORD
    ctypedef WORD            *LPWORD
    ctypedef long            *LPLONG
    ctypedef DWORD           *PDWORD
    ctypedef DWORD           *LPDWORD
    ctypedef void            *LPVOID
    ctypedef int                 INT
    ctypedef unsigned int        UINT
    ctypedef unsigned int        *PUINT

cdef extern from "ScanAPI.h":
    cdef enum SCANNER_TYPE:
        SCANNER_NONE = 0 # no scanner
        SCANNER_CFCARD # Socket In-Hand Scan Card
        SCANNER_WAND # a wand
        SCANNER_GUN # a gun

    cdef enum GRS_TYPE:
        GRS_NONE = 0	                # no good read sound
        GRS_MESSAGEBEEP 	        # play MessageBeep(0) on good read
        GRS_WAVFILE                     # play user-supplied .WAV on good read

    cdef struct tagSCANDEVINFO:
        DWORD StructSize					# size of the structure
        SCANNER_TYPE ScannerType				# gun, wand, or integrated card
        unsigned int fHardwareTrigger :1		# most likely a gun
        unsigned int fSoftwareTrigger :1		# most likely an integrated card
        unsigned int fSoftwareAbortTrigger :1	# most likely an integrated card
        unsigned int fGoodReadLight :1			# most likely a gun
        unsigned int fGoodReadSound :1			# most likely a gun
        TCHAR SymbolType					# Symbol type code from ISC scanner

    ctypedef tagSCANDEVINFO SCANDEFINFO
    ctypedef tagSCANDEVINFO *LPSCANDEVINFO

    cdef enum SCAN_RESULT:
        SR_INVALID_WMINSERTION
        SR_INVALID_WMREMOVAL
        SR_PLUG_THREAD_FAILURE
        SR_DEVICE_THREAD_FAILURE
        SR_INVALID_SCANNER_HANDLE
        SR_OPEN_FAILURE
        SR_INVALID_WMSCANNERDATA
        SR_NO_DATA
        SR_BUFFER_TOO_SMALL
        SR_SCANNER_NOT_OPEN
        SR_INVALID_SOUND_TYPE
        SR_WAVFILE_NOT_FOUND
        SR_MEMORY_FAILURE
        SR_INVALID_ERR
        SR_TOO_MANY_USERS
        SR_TOO_MANY_ATTEMPTS
        SR_NOT_INITIALIZED
        SR_DEVICE_FAILURE
        SR_INTERNAL_FAILURE
        SR_INVALID_STRUCTURE
        SR_HOTSWAP_ERROR

    SCAN_RESULT WINAPI ScanInit(HWND hWnd, UINT wmInsertion, UINT wmRemoval)
    SCAN_RESULT WINAPI ScanOpenDevice(HANDLE hScanner)
    SCAN_RESULT WINAPI ScanCloseDevice(HANDLE hScanner)
    SCAN_RESULT WINAPI ScanGetDevInfo(HANDLE hScanner, LPSCANDEVINFO
lpScanDevInfo)
    SCAN_RESULT WINAPI ScanRequestDataEvents(HANDLE hScanner, HWND
hWnd, UINT wmScannerData)
    SCAN_RESULT WINAPI ScanTrigger(HANDLE hScanner)
    SCAN_RESULT WINAPI ScanAbort(HANDLE hScanner)
    SCAN_RESULT WINAPI ScanGetData(HANDLE hScanner, TCHAR * lpBuff,
LPINT BufSize)
    SCAN_RESULT WINAPI ScanSetGoodReadSound(HANDLE hScanner, GRS_TYPE
Sound, LPCTSTR lpWavFile)
    SCAN_RESULT WINAPI ScanDeinit(void)
    SCAN_RESULT WINAPI ScanErrToText(SCAN_RESULT Err, LPTSTR lpBuff,
LPINT BufSize)

Thank you very much in advance for your help,
Adam




More information about the Pyrex mailing list