سلام، ممکن است شما هم مثل من دوست داشته باشید برنامه های کاربردی ای که ایجاد می کنید به آسانی قابل توسعه توسط دیگران (حتی افراد غیر برنامه نویس = کاربران عادی) باشد، بدون اینکه کاربر نیازی به فهمیدن سورس کد برنامه ی شما و تغییر آن داشته باشد.
ساده ترین و تمیزترین راه حلی که به ذهن من می رسد، استفاده از Embedded Python می باشد. یعنی اینکه:
سوالی که ممکن است به ذهن شما برسد این است که ”چرا Python؟”:
و سوال اساسی تری که ممکن است به ذهن شما برسد: ”Python چیست؟”
در ادامه آشنایی مختصری با Embedded Python خواهیم داشت.
گام اول، قرار دادن Header فایل ها و فایل های کتابخانه ای Python در مسیر مناسب می باشد. من که از سیستم عامل ویندوز و کامپایلر MingW استفاده می کنم، کارهای زیر را انجام دادم:
(گمان کنم کارهای بالا هنگام استفاده از کامپایلر GCC در سیستم عامل لینوکس نیاز نیست.)
ساده ترین برنامه ی ++C ای که یک دستور ساده ی Python را اجرا می کند:
#include <python/Python.h> int main() { Py_Initialize(); PyRun_SimpleString("print 'With friends around me!'"); Py_Finalize(); return 0; }
برای کامپایل کردن این برنامه که با اسم a.cpp ذخیره شده است، از دستور زیر اجرا کنید:
g++ a.cpp -lpython25
گمان کنم برنامه ی بالا به اندازه ی کافی قابل فهم باشد.
تنها نکته ای که در رابطه با کد بالا به ذهنم می رسد این است که اگر می خواهد Script ذخیره شده در فایلی را اجرا کنید، به جای دستور PyRun_SimpleString از دستور PyRun_SimpleFile استفاده کنید.
حال، برای تعریف کردن تابع هایی از برنامه ی خودتان که قابل دسترسی در Script های Python باشند، به صورت زیر عمل کنید:
#include <python/Python.h> #include <iostream> using namespace std; int colour = 0; PyObject* DrawLine(PyObject* self, PyObject* pArgs) { int x1, y1, x2, y2; PyArg_ParseTuple(pArgs, "llll", &x1, &y1, &x2, &y2); cout << "Drawing a Line from (" << x1 << "," << y1 << ") to (" << x2 << "," << y2 << ")" << endl; Py_INCREF(Py_None); return Py_None; } PyObject* SetColour(PyObject* self, PyObject* pArgs) { PyArg_ParseTuple(pArgs, "l", &colour); Py_INCREF(Py_None); return Py_None; } PyObject* GetColour(PyObject* self, PyObject* pArgs) { return PyInt_FromLong(colour); } static PyMethodDef paintMethods[] = { {"DrawLine", DrawLine, METH_VARARGS, "Draws a Line"}, {"SetColour", SetColour, METH_VARARGS, "Sets the Colour"}, {"GetColour", GetColour, METH_VARARGS, "Gets the Colour"}, {0,0,0,0} }; int main(int argc, char *argv[]) { Py_Initialize(); Py_InitModule("paint", paintMethods); PyRun_SimpleString("import paint"); PyRun_SimpleString("paint.DrawLine(1,1,100,100)"); PyRun_SimpleString("paint.SetColour(4)"); PyRun_SimpleString("print 'The Colour is:',paint.GetColour()"); Py_Finalize(); return 0; }
و در آخر، برای آشنایی دقیق تر با جزئیات Embedded Python به لینک 4 و لینک 5 مراجعه کنید.
مراجعه کنید به http://wiki.python.org/moin/boost.python/GettingStarted.
(یکی اینجا رو بنویسه!)
مراجعه کنید به http://wxcode.sourceforge.net/components/wxscript/.
(یکی اینجا رو بنویسه!)