[Tutor PyCZ] pouziti knihovny v C z pythonu

Michal Molhanec molsoft na centrum.cz
Pondělí Červenec 4 22:12:15 CEST 2005


teda je to uz dlouho, co jsem neco takovyho psal, ale kdyz vidim, co se 
tu deje.

1) kod z tohohle mailu uloz do mycrc.c
2) zkompiluj pomoci
cl -LD mycrc.c  -Id:\python24\include -link -LIBPATH:d:\python24\libs
kde d:\python24 je tvoje instalace pythonu (melo by bez problemu 
fungovat i v 2.3)
BTW fakt nechapu v cem je ten prikaz horsi nez ten pro gcc ?!?
3) no a pak uz staci
import mycrc
print mycrc.crc("fsdfsdf")

pokud ti nejde nainstalovat VC 6 tak napis, co konkretne ti nejde, jinak 
je to debata o nicem

-- 
Regards,
     Michal

ICQ# 175762750

=============================KOD

#include <Python.h>

#define poly 0x8005
#define BITF 0x8000

static PyObject* crc(PyObject* self, PyObject *args)
{
   int count;
   unsigned char *ptr;
   unsigned int i,j;
   unsigned short int tmp,val;    // 16 Bit

   if (!PyArg_ParseTuple(args, "s#" , &ptr, &count)) return NULL;

   tmp = *ptr++;
   tmp = (tmp<<8) + *ptr++;    // first 16 bit value

   for (i=count/2;i>0;i--)    // only even counts !!! and more than 4
   {
   if (i>1)
   {
   val = *ptr++;
   val= (val<<8) + *ptr++;    // next 16 bit value
   }
   else
   {
     val=0; //last valu with 0   // last 16 bit value
   }
     for (j=0;j<16;j++)
     {
        if (tmp & BITF)
        {
           tmp  <<= 1;
           if (val & BITF)tmp++;  // rotate carry
           tmp ^= poly;
        }
        else
        {
           tmp  <<= 1;
           if (val & BITF)tmp++;  // rotate carry
        }
        val <<= 1;
      }
   }

   return Py_BuildValue("i" , tmp);
}

static PyMethodDef MyCrcMethods[] = {
   {"crc", crc, METH_VARARGS, "My CRC"},
   {NULL,  NULL,0,            NULL}        /* Sentinel */
};

PyMODINIT_FUNC initmycrc(void) {
     PyObject* module = Py_InitModule3("mycrc", MyCrcMethods, "My CRC");
}


Další informace o konferenci Tutor