Bir kitaplığı SWIG (hedef olarak Python) ile kaydediyorum. Kütüphane fonksiyonları "uint32_t", "uint8_t" vb. Veri tiplerini içerir. Arabirimi mümkün olduğunca çapraz platform olarak oluşturmak istiyorum, bu yüzden interface.i
dosyamdaki orijinal işlev imzalarını kullanmak istiyorum. Örneğin:SWIG ile çapraz platform arabirimi nasıl oluşturulur?
uint32_t func(uint32_t a, uint32_t b);
Ben çözmeye çalışıyorum sorun uint32_t
veri türü üzerinde typedef
olmadıkça yudum bir tamsayı olarak parametreyi tanımayacaktır olmasıdır.
typedef unsigned uint32_t;
typedef
satırı Python bağlayıcı hedeften çağrılabilir olmamaya işlevini neden olacağını Çıkarma:
>>> mylib.func(2, 2)
TypeError: in method 'func', argument 1 of type 'uint32_t'
önceki typedef
Tamam üzerinde olan Şu anda arayüzü kayıtlı bu kullanıyorum yerel makinem, ancak başka bir derleyici/platformda farklı olabilir. yönergesini %include "stdint.h"
kullanma yudum bir hata yükseltecek: yudum tam özellikli derleyici değildir ve tam olarak bu başlıktan tüm #ifdef
değerlendiremez beri
/usr/include/stdint.h:44: Error: Syntax error in input(1).
Wich mantıklı.
SWIG, derleyicinin stdint.h
üstbilgisinde seçtiği veri türleriyle doğru bir şekilde nasıl besleyebilirim? Aslında, doğru veri tiplerini tam olarak uygulamak için mantıklı mıdır, yoksa sadece typedef
intX_t
'un long
'a girmesi tamam mı?