佬,同一段代码,在32位架构下可以添加ObjectNode 和 VariableNode,64位架构下无法创建ObjectNode 以及后继的VariableNode(单独添加可以),网上找不到其他的解答。代码和截图如下:
//创建祖父节点
std::string parentName("INTEGER");
UA_NodeId SystemObjectId = UA_NODEID_STRING(1, (char *)parentName.c_str());
UA_ObjectAttributes system = UA_ObjectAttributes_default;
system.displayName = UA_LOCALIZEDTEXT((char *)"en-US", (char *)parentName.c_str());
UA_StatusCode status1 = UA_Server_addObjectNode(server,
SystemObjectId, //传入的自身节点ID
UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), //定义在哪个节点下创建对象
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), //父节点引用类型的Id
UA_QUALIFIEDNAME(1, (char *)parentName.c_str()), //BrowseName名字定义
UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE), //类型的定义
system, //对象属性
NULL, NULL);
if (status1 == UA_STATUSCODE_GOOD) {
printf("yeye节点添加成功!\n");
} else {
printf("yeye节点添加失败,错误码:%s\n", UA_StatusCode_name(status1));
}
我一直用的64位系统,没遇到这样的问题,你用的是release版本的open62541吗?
【以下回答由 GPT 生成】
答案:
这个问题可能是由于32位和64位架构对内存空间和指针的处理方式不同导致的。具体而言,可能是字符串或指针相关的问题。
首先,为了更好地分析和解决这个问题,我需要额外的信息。请回答以下问题:
UA_NodeId
类型的对象SystemObjectId
的?根据你提供的代码和截图,我没有看到任何明显的问题。所以,我需要更多信息来进一步解决这个问题。感谢你的合作!