Python

2011-08-25 5 views
5

'da C++ sınıfının bir örneğini oluşturma ve bunun üzerine çağrı yöntemleri oluşturma Python uygulamamda bir C++ kitaplığı kullanmaya çalışıyorum. Dll'yi python'a yükleyebilirim, ancak C++ dll'nin içindeki bir sınıfın örneğinin nasıl oluşturulacağı ve bu yöntemle ilgili yöntemleri çağırmaya yönelik herhangi bir çözüm bulamadım. TakipPython

ne yaptığını ve

from ctypes import * 
myDll = windll.LoadLibrary("My.dll") 

aşağıdaki

yapmak istiyorum My.dll

class MyClass 
{ 
    public: 
    MyMethod(int param); 
} 

Python kodu içinde

C++ kodu istiyor

myClassInstance = myDll.InstantiateMyClass() myClassInstance.MyMethod(5) 
+1

Boost :: Python –

+0

'a bir göz atmalısınız. Bunu farklı C++ derleyicileri karıştıramazsınız, farklı bir dilde olsun. [@PatPlusPlus'u dinleyin ve Python tipleriyle tam gelişmiş Python eklentisi yazın.] (Http://stackoverflow.com/questions/7196118/creating-an-instance-of-ac-class-and-calling-methods-on -it-in-python/7196380 # 7196380) –

cevap

5

klişe ile mümkün olsa da, kesinlikle bu kadar kolay olmayacaktır. Örneğin, kullanımı çok daha kolay olacaktır. Bu sınıfı bir Python türü olarak gösteren uygun bir CPython uzantısı oluşturmak için Boost.Python veya Cython.

1

Ctypes ile bir C++ dll yükleniyor, tehlikeli ve bazı güçlü sınırlamaları vardır. Dışa aktarılan işlev adı, C++'daki işlevi "extern" C "'olarak bildirmediyseniz, bildirdiğinizyle aynı değildir. Bu sadece işlevler için değil, salt işlevler için mümkündür. C++ derleyici, "ad manggling" adında bir şey yapar, bkz. http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B.

Ben iki çözüm önermek:

  1. İhtiyacınız işlevselliği açığa 'extern 'C'' olarak ilan saf fonksiyonları, bazı C++ kod yazmak.
  2. Cython http://cython.org/'u kullanmanızı özellikle tavsiye ediyorum, özellikle http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html size yardımcı olacaktır. Çok kullandım ve benim için C++ kodunu Python'a sarmanın en iyi yolu.

EK NOTLAR:

ben artırmak Python bazı kere denedim ama zor kullanmak bulundu. Öğrenmeniz gereken kendi derleme sistemi vardır, derleme süreci çok yavaştır ve şablon sözdizimi nedeniyle kodun okunması zorlaşır. Pythonun ardında yatan içerik çok güzel, ama bence bu kullanımı zor.

Ayrıca kendimi çok rahat hissetmediğim SIP ve SWIG'i denedim.

Cython'u kullanmanızı tavsiye ederim.

+0

İlk satırda "python" demek istediniz? Cython'un neden tehlikeli ve sınırlı olduğunu söylediğinizde kafam karıştı, sonra da bunu tavsiye et (2). (Bu konuda hiçbir şey bilmiyorum ...) –

+0

düzeltildi. şimdi kırkayaklar. – rocksportrocker