Hi -
thanks to Louis for answering my last question about function pointers.
I now have a new challenge: How to handle :uint64 when I using AllegroCL 8.1 express edition on Mac OS X when this implementation is not supporting :unsigned-long-long ?
I do have:
(defcfun ("amqp_basic_ack" %amqp-basic-ack) :int (state amqp-connection-state-t) (channel amqp-channel-t) (delivery-tag :uint64) ;;; <<<<<< ---- this is my problem ... (multiple amqp-boolean-t))
Could I get around this with a clever padding of the 'multiple' argument ?
Thanks for any advice!
Cheers Frank
Hi, Frank
Unlike other CLs, Allegro CL is especially good at using "helper dlls", that is, you create a C function which doesn't use any 64-bit arguments in your own DLL and your function could call any other C library's functions which may have 64-bit arguments. Then you use CFFI to load the helper DLL instead. Of course you have to handle type coerce from 32-bit to 64-bit by yourself. For example, the "delivery-tag" in your sample could be changed to two 32-bit arguments "delivery-tag_L" and "delivery_tag_H", both of them are typed of :uint32.
CFFI itself is excellent, however Franz (Allegro CL's vendor) is lazy ...
--binghe
在 2010-1-16,21:24, Frank Goenninger 写道:
Hi -
thanks to Louis for answering my last question about function pointers.
I now have a new challenge: How to handle :uint64 when I using AllegroCL 8.1 express edition on Mac OS X when this implementation is not supporting :unsigned-long-long ?
I do have:
(defcfun ("amqp_basic_ack" %amqp-basic-ack) :int (state amqp-connection-state-t) (channel amqp-channel-t) (delivery-tag :uint64) ;;; <<<<<< ---- this is my problem ... (multiple amqp-boolean-t))
Could I get around this with a clever padding of the 'multiple' argument ?
Thanks for any advice!
Cheers Frank
cffi-devel mailing list cffi-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
Thanks, binghe (how is that pronounced, btw ?), I'll go with the helper dll approach as you suggested. Easy enough ;-)
Cheers Frank
Am 16.01.2010 um 21:49 schrieb Chun Tian (binghe):
Hi, Frank
Unlike other CLs, Allegro CL is especially good at using "helper dlls", that is, you create a C function which doesn't use any 64-bit arguments in your own DLL and your function could call any other C library's functions which may have 64-bit arguments. Then you use CFFI to load the helper DLL instead. Of course you have to handle type coerce from 32-bit to 64-bit by yourself. For example, the "delivery-tag" in your sample could be changed to two 32-bit arguments "delivery-tag_L" and "delivery_tag_H", both of them are typed of :uint32.
CFFI itself is excellent, however Franz (Allegro CL's vendor) is lazy ...
--binghe
在 2010-1-16,21:24, Frank Goenninger 写道:
Hi -
thanks to Louis for answering my last question about function pointers.
I now have a new challenge: How to handle :uint64 when I using AllegroCL 8.1 express edition on Mac OS X when this implementation is not supporting :unsigned-long-long ?
I do have:
(defcfun ("amqp_basic_ack" %amqp-basic-ack) :int (state amqp-connection-state-t) (channel amqp-channel-t) (delivery-tag :uint64) ;;; <<<<<< ---- this is my problem ... (multiple amqp-boolean-t))
Could I get around this with a clever padding of the 'multiple' argument ?
Thanks for any advice!
Cheers Frank
cffi-devel mailing list cffi-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel