You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms应用使用open62541连接OPC UA服务器遇引用问题

WinForms引用open62541.dll报错的排查方案

我开发WinForms客户端应用,需连接OPC UA服务器读写变量,选用open62541库,按以下步骤操作后添加dll引用时报错:

  1. 修改open62541源码的CMakeLists.txt配置:
option(UA_ENABLE_AMALGAMATION "Concatenate the library to a single file open62541.h/.c" ON)
option(BUILD_SHARED_LIBS "Enable building of shared libraries (dll/so)" ON)
  1. 执行编译命令:
cd open62541
mkdir build
cd build
cmake.exe .. -G "Visual Studio 16 2019"
  1. 在Visual Studio 16 2019中打开open62541.sln,以Release 64位配置编译得到文件,将open62541.dll复制到项目Libraries目录,添加引用时出错。

解决步骤

  • 匹配项目与dll的平台架构:检查WinForms项目的目标平台是否为x64。右键项目→属性→生成→目标平台,选择x64,避免32位项目引用64位dll导致的架构不兼容。
  • 正确引入原生dll(不要用.NET添加引用):open62541是C语言原生dll,WinForms作为.NET项目不能直接通过"添加引用"功能引入。正确操作:
    1. 将open62541.dll放到项目输出目录(如bin/Release/x64),或者右键Libraries目录下的dll→属性→复制到输出目录→选择"始终复制",确保运行时能找到dll。
    2. 通过P/Invoke声明dll中的函数,示例:
    [DllImport("open62541.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern IntPtr UA_Client_new();
    
  • 核对编译产物完整性:编译open62541时,除了dll,还会生成open62541.h头文件,需要对照头文件中的函数声明,确保P/Invoke的签名(函数名、参数、返回值类型)完全匹配。
  • 确认CMake配置与编译结果:启用UA_ENABLE_AMALGAMATION后,build目录的bin/Release下应生成open62541.dll,同时检查VS编译输出窗口是否有错误,确保dll生成正常。
  • 检查VC++运行时依赖:open62541编译依赖VC运行时库,若WinForms项目运行环境未安装对应版本的x64 VC Redistributable,会导致dll加载失败,需安装VS2019对应的x64运行时组件。

内容的提问来源于stack exchange,提问作者ash vaaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:42:10