[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