2014-06-11 77 views
0

我目前正在開發一個項目,將一個Matlab程序導入到python中作爲插件集成到ImageJ中。該程序包含Mex文件,源代碼是用C++編寫的。有沒有一種方法可以調用C++函數而不必在python中重寫它們。謝謝!!!從Python中調用C/C++代碼

+0

你想如何調用C函數?這些功能是什麼?它們是否可用作Python函數? – Schorsch

+1

@ThePathan:我想,你將無法直接從Python調用MEX函數。您需要實現所有MATLAB MEX API函數,這似乎是不可能的,除非您使用MATLAB。 – nneonneo

+0

...查看[這個問題](http://stackoverflow.com/questions/6848790/embed-a-function-from-a-matlab-mex-file-directly-in-python)瞭解更多詳情。 – nneonneo

回答

1

如果您可以將您的程序構建爲共享庫,那麼您可以使用外部函數接口來調用您的函數。

與使用Cython封裝函數或編寫自己的C-API擴展相比,這通常少工作(且不那麼複雜),但它的用途也更加有限。因此,我建議從​​開始,如果您發現​​不適合您的需求,則可以繼續使用Cython。

但是,對於簡單的庫,​​會做得很好(我使用它很多)。

+0

感謝您的答覆!環顧四周,看起來ctypes是最容易的出發點。另外,我可以從ImageJ環境中導入** ctypes **,這對我的項目非常重要(該項目將Matlab程序轉換爲imageJ插件)。但是,我從來沒有建立任何共享庫。如果它太複雜,我可能會問你求助。但感謝您的幫助。非常感謝。 – Haider

+0

@ThePathan:不要忘記選擇你最喜歡的答案,在左邊標記**✓**。 –

1

歡迎來到Stack Overflow!

您需要將這些C函數封裝到python C擴展中,通過Python C-API,以便它們可以從python調用;不過,我可以從經驗告訴你,如果你不知道自己在做什麼,這項任務可能會令人頭疼。我想推薦檢出cython。它使編寫C擴展與編寫Python代碼一樣簡單!