On Tue, 11 Sep 2007 05:09:58 -0700, Tim wrote: > On Sep 10, 3:31 pm, Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> wrote: >> On Mon, 10 Sep 2007 11:38:50 -0700, Tim wrote: >> > How do I memcpy from a pointer to an array of floats in python? >> >> > I get errors: NameError: global name 'row' is not defined >> >> Well than the (global) name `row` is not defined. Quite clear message, >> isn't it? ;-) >> >> > I want to be able to get the row[i] array element. In C I would >> > normally place the address of row as the first argument. >> >> > cdll.msvcrt.memcpy( row, pData, 256 ) >> >> > If I define row as the following I also get the following error: >> >> > row = ones( TOTAL_PARAMETER_ENTRIES, dtype=float ) >> >> > ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know >> > how to convert parameter 1 >> >> You don't give enough information so we have to guess. For example I >> guess the `ones()` function comes from one of the packages `numeric`, >> `numarray` or `numpy`!? >> >> This function returns a Python object. You can't use arbitrary Python >> objects with `ctypes`. `memcpy` expects a pointer not an object. > > Can I initialize something in Python that I can get access to it's > pointer?
"It's pointer"? Then you have a pointer to a structure that represents the Python object but still no idea what data is at that pointer. This is an implementation detail of the Python version and of the particular object. > Here is what I would like to write: > > shared_memory_pointer = windll.kernel32.MapViewOfFile(hMapObject, > FILE_MAP_ALL_ACCESS, > 0, 0, TABLE_SHMEMSIZE) > > memcpy( self.data, shared_memory_pointer, my_size ) I haven't tested but it should be possible to declare the return type of `windll.kernel32.MapViewOfFile()` as ``ctypes.POINTER(ctypes.c_double * 256)`` and then do: test_data = numpy.ones(1000) shared_memory_pointer.contents[0:256] = test_data[0:256] Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list