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

如何编译pjsip并在Visual Studio的C#项目中作为dll使用

编译pjsip为DLL并在Visual Studio C#项目中使用操作指南

前置准备

  • 安装Visual Studio 2019/2022社区版,安装时必须勾选「使用C++的桌面开发」工作负载,确保MSVC编译器、对应版本Windows SDK已安装
  • 下载pjsip源码包,解压到无中文、无空格的本地路径,例如D:\pjsip-source

步骤1:编译pjsip为动态链接库(DLL)

  • 进入pjsip源码根目录,找到pjlib/include/pj/config_site.h文件,若文件不存在则手动新建,写入以下配置内容:

#define PJ_DLL 1
#define PJ_EXPORT_DECL_SPECIFIER __declspec(dllexport)
#define PJ_IMPORT_DECL_SPECIFIER __declspec(dllimport)

  • 打开对应版本VS的原生工具命令提示符,64位编译选择「x64 Native Tools Command Prompt for VS 20XX」,32位编译选择「x86 Native Tools Command Prompt for VS 20XX」,禁止使用普通cmd窗口执行编译
  • 在命令行中cd到pjsip源码根目录,执行配置命令:
    • 64位编译:configure-vs.cmd
    • 32位编译:configure-vs.cmd x86
  • 执行编译命令:nmake all,等待编译完成无报错后,生成的所有DLL、LIB文件会存放在源码根目录下的lib文件夹内

步骤2:C#项目中调用pjsip DLL

  • 打开你的Visual Studio C#项目,右键项目→「属性」→「生成」,将目标平台设置为和pjsip编译架构完全一致(x64/x86),架构不匹配会直接导致调用失败
  • 将pjsip编译生成的全部.dll文件复制到C#项目的输出目录中,默认输出目录为bin\Debug\netX.X或bin\x64\Debug
  • 在C#代码中通过P/Invoke声明需要调用的pjsip接口,示例如下:
using System.Runtime.InteropServices;

// 声明pjsip接口,注意CallingConvention必须指定为Cdecl
[DllImport("pjlib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int pj_init();
  • 运行项目前确认所有依赖DLL都在运行目录,即可正常调用pjsip接口实现对应功能

常见问题排查

  • 编译pjsip时报错:先检查源码路径是否存在中文、空格,VS的C++桌面开发组件是否完整安装
  • C#运行提示「找不到指定的DLL」:检查目标平台是否匹配,所有pjsip相关DLL是否都放在程序运行目录
  • 调用接口时出现堆栈不平衡报错:检查DllImport特性中是否指定了CallingConvention = CallingConvention.Cdecl

内容的提问来源于stack exchange,提问作者Khaled Janky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:02