我想在C中使用Tcl-C-Code创建一个名为MqHandShakeE的IntEnum子类作为模板
int NS(Get_MqHandShakeE_FromObj) (Tcl_Interp *interp, Tcl_Obj *enumE, enum MqHandShakeE *ret) {
int index;
const static struct LookupEnumE keys[] = {
{ "START", MQ_HANDSHAKE_START },
{ "OK", MQ_HANDSHAKE_OK },
{ "ERROR", MQ_HANDSHAKE_ERROR },
{ NULL, 0 }
};
TclErrorCheck (Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
sizeof(struct LookupClassS), "enum", TCL_EXACT, &index));
*ret = keys[index].val;
return TCL_OK;
}
我的目标是用
^{pr2}$C-常数MQ_HANDSHAKE_START
是一个整数
仅Python解决方案:
from enum import IntEnum
class WAIT(IntEnum):
NO = 0
ONCE = 1
FOREVER = 2
这是类型安全的,因为WAIT.NO
具有类型WAIT
和值0
……这一点我可以检查……从下到下的子模块方法是不是类型安全的WAIT.NO
as子模块的类型是int
我在发布了C++的样本后,我意识到OP用C(不C++)来标注问题。对不起,我的错。下面是C语言的示例:
使用Python 3.6在VS2013中编译和测试:
^{pr2}$此示例建立一个模块
MQ_HANDSHAKE
,该模块 -必须附加到Python表中(使用PyImport_AppendInittab()
) 在调用PyInitialize()
之前 -必须在Python代码中导入(使用import MQ_HANDSHAKE
)。在< C++中的原始答案:
我看了一下我们的Python包装器,并为OPs案例做了一个小示例:
使用Python 3.6在VS2013中编译和测试:
^{pr2}$我必须承认,我很像这个例子,在我们的生产代码作弊,我们曾经耐心地在网上挖掘资源。对于基本介绍,我建议使用1. Embedding Python in Another Application。在
根模块必须在Python代码中导入才能使用(Python示例代码中的
import mq
)。在我们的高效代码中,我们在前面的一个单独的调用PyRun_SimpleString()
中完成了这项工作,因此我们的Python应用程序程序员甚至不需要关心这个问题。在我将实现分成多个模块(}建立一个模块
mq
和mq.Handshake
)。通过使用模块变量START
、OK
和{mqHandshake
,这当然可以缩短。在这是我的答案…在python-C-api中创建一个类型安全的类。在
→Python C-API… how to write python code in C
相关问题 更多 >
编程相关推荐