首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Elmer中有没有使用指针和回调的方法?

Elmer中有没有使用指针和回调的方法?
EN

Stack Overflow用户
提问于 2014-07-30 01:36:49
回答 1查看 52关注 0票数 0

我一直在使用Elmer在DLL中构建、包装一些python代码(有关elmer的详细信息,请参阅http://elmer.sourceforge.net/ )。

我正在尝试弄清楚是否有一种方法可以构造.elm文件,这样我就可以在elmer中使用指针参数或设置回调函数。

在.elm文件中,取而代之的是检索如下所示的值:

代码语言:javascript
运行
复制
double  get(int id)

我可能想要这样做:

代码语言:javascript
运行
复制
void  get(int id, double* val)

或者设置回调

代码语言:javascript
运行
复制
void registerCallback(int id, void (*MyCb)(double value) )

为了清楚起见,这是在告诉elmer如何在dll的c代码中包装python函数的.elm文件中,而不是在c或python源代码中。

EN

回答 1

Stack Overflow用户

发布于 2014-09-09 23:53:28

在搜索了elmer源代码之后,我想出了如何做回调。似乎没有任何方法可以传递指针(除了用于字符串类型的char *)。

在.elm文件中,首先需要定义回调函数原型,前面加上回调关键字。然后使用该回调的名称作为.elm中函数原型的参数

代码语言:javascript
运行
复制
#snipped from mytest.elm

#define callbacks types
callback int MyCb(int arg1, int arg2)

#function prototypes
int  register_callback(string someOtherArgs,  callback MyCb)

python代码将接收回调函数作为任何其他参数,并且它可以自由地调用它,就像它是带有声明的参数的本机python函数一样。如果你想不断地调用回调(就像大多数事件处理程序一样),你就必须在你的python代码中创建自己的循环机制。一种选择是循环,直到回调返回零;例如:

代码语言:javascript
运行
复制
#snipped from mytest.py

def register_callback(someOtherArg, callbackFunc):
    cbArg1, cbArg2 = (1,2) #just some dummy values
    while(callbackFunc(cbArg1, cbArg2) == TRUE):
        print("I'm calling the callback...")
        time.sleep(.1)

要使用它,你需要在你的c/c++代码中:

代码语言:javascript
运行
复制
//snipped from mytest.c

//define the callback function.
//based on example python code, this would be called continuously until it
//returns 0
int MyAwesomeCallbackFunction(int arg1, int arg2) {/*definition goes here*/ return 1};

//register the callback and start the python based loop that calls MyAwesomeCallbackFunction
register_ui_callback("LadaDeDa", &myAwesomeCallbackFunction);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25021587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档