关于OPC-UA在32位和64位下无法添加对象结点的问题

佬,同一段代码,在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));
}

img

我一直用的64位系统,没遇到这样的问题,你用的是release版本的open62541吗?

【以下回答由 GPT 生成】

答案:

这个问题可能是由于32位和64位架构对内存空间和指针的处理方式不同导致的。具体而言,可能是字符串或指针相关的问题。

首先,为了更好地分析和解决这个问题,我需要额外的信息。请回答以下问题:

  1. 在64位架构下你是否遇到了任何警告或错误信息?
  2. 你是如何定义和使用UA_NodeId类型的对象SystemObjectId的?
  3. 你能否提供用于单独添加变量节点的代码片段?

根据你提供的代码和截图,我没有看到任何明显的问题。所以,我需要更多信息来进一步解决这个问题。感谢你的合作!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^