回答
使用用Cython,你可以寫聲明爲與cdef
關鍵字Ç那些功能,與Python內碼(和public
...重要!):
yourext.pyx
cdef int public func1(unsigned long l, float f):
print(f) # some python code
注:以下假定我們在驅動器d的根工作:\
大廈(setup.py)
from distutils.core import setup
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
name = 'My app',
ext_modules = cythonize("yourext.pyx"),
)
然後運行python setup.py build_ext --inplace
運行setup.py(如果你使用distutils
)後,你會得到的利息2個文件:
- yourext .h
- yourext.c
調查.c
會告訴你最後是func1
是一個C函數。
這兩個文件都是我們需要做休息。
用於測試C主程序
// test.c
#include "Python.h"
#include "yourext.h"
main()
{
Py_Initialize(); // start python interpreter
inityourext(); // run module yourext
func1(12, 3.0); // Lets use shared library...
Py_Finalize();
}
由於我們不使用本身的擴展名(.pyd
),我們需要做的小動作/劈在頭文件中禁用「DLL行爲」。添加以下在 「yourext.h」 開頭:
#undef DL_IMPORT # Undefines DL_IMPORT macro
#define DL_IMPORT(t) t # Redefines it to do nothing...
__PYX_EXTERN_C DL_IMPORT(int) func1(unsigned long, float);
編譯 「yourext」 作爲共享庫
gcc -shared yourext.c -IC:\Python27\include -LC:\Python27\libs -lpython27 -o libyourext.dll
然後編譯我們的測試程序(鏈接到DLL)
gcc test.c -IC:\Python27\include -LC:\Python27\libs -LD:\ -lpython27 -lyourext -o test.exe
最後,運行程序
$ test
3.0
這並不明顯,而且還有許多其他的方式來達到同樣的事情,但這個工程(看看到boost::python,...,其他解決方案可以更好地滿足您的需求)。
我希望這回答有點你的問題,或者至少,給你一個想法...
非常感謝詳盡的答案..我正在通過它。看起來不錯 –
好的,請保持我們的發佈(即使您的最終解決方案不是Cython,我很感興趣!),並且如果您使用Cython獲得有趣的結果,請不要猶豫'回答您自己的問題。 –
- 1. 從C++ dll暴露類?
- 2. 暴露一個TStringList
- 3. 由AWS Elastic暴露的源代碼Beanstalk
- 4. 如何在python中暴露源代碼來分發包?
- 5. 將類庫DLL暴露給COM使用
- 6. 將c#DLL暴露給VB6時出錯
- 7. Python暴露在範圍內
- 8. 暴露C++函數到Python
- 9. 許多一對多暴露通過代碼第一
- 10. 在django中暴露密碼
- 11. 多個版本的dll WCF服務與兩個服務暴露
- 12. 如何創建Kubernetes服務與暴露兩個端口的kubectl
- 13. 如何創建一個我的C++代碼的DLL。
- 14. 暴露一個COM對象的要求
- 15. java屬性 - 暴露還是不暴露?
- 16. 從庫中創建一個沒有任何新代碼的DLL
- 17. 如何使一個DLL訪問託管代碼,但暴露功能非託管二進制
- 18. 暴露碼頭集裝箱碼頭
- 19. 使用boost python擴展暴露的類
- 20. 如何不暴露python中的方法
- 21. 自動暴露boost python中的屬性
- 22. 從靜態庫中暴露一個類
- 23. 從十六進制創建一個DLL代碼
- 24. 暴露在Drupal
- 25. 暴露在Drupal
- 26. 暴露集合的高效替代品
- 27. 暴露私人範圍的Boost.BiMap迭代
- 28. Python代碼來創建一個密碼加密的zip文件?
- 29. 有沒有辦法找到一個dll暴露的所有功能
- 30. 能從只暴露迭代器的「readNext」部分的對象創建流嗎?
你在正確的軌道上提到Cython。挖掘它;)。 http://docs.cython.org/src/userguide/language_basics.html –
您是否找到滿意的解決方案解決您的問題? –