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

求助:如何基于google/jpegli构建适配C# wrapper的DLL

如何基于jpegli静态库构建可供C#调用的动态链接库(DLL)

步骤1:创建C++ DLL项目(以Visual Studio为例)

  • 打开Visual Studio,新建**动态链接库(DLL)**项目,命名为jpegli-wrapper
  • 配置项目路径:
    1. 右键项目→属性→C/C++→常规→附加包含目录:添加jpegli源码的include文件夹路径,以及vcpkg安装jpegli后的include路径
    2. 右键项目→属性→链接器→输入→附加依赖项:添加jpegli-static.lib的完整路径

步骤2:编写导出接口的C++代码

新建jpegli_wrapper.cpp文件,编写C风格导出函数(避免C++名字修饰,方便C#的PInvoke调用):

#include "jpegli/decode.h"
#include "jpegli/encode.h"

// 导出宏配置
#ifdef JPEGLI_WRAPPER_EXPORTS
#define JPEGLI_WRAPPER_API __declspec(dllexport)
#else
#define JPEGLI_WRAPPER_API __declspec(dllimport)
#endif

// 导出jpegli解码初始化函数
extern "C" JPEGLI_WRAPPER_API struct jpegli_decompress_struct* JpegliCreateDecompress() {
    struct jpegli_decompress_struct* cinfo = new jpegli_decompress_struct();
    jpegli_create_decompress(cinfo);
    return cinfo;
}

// 导出jpegli解码清理函数
extern "C" JPEGLI_WRAPPER_API void JpegliDestroyDecompress(struct jpegli_decompress_struct* cinfo) {
    jpegli_destroy_decompress(cinfo);
    delete cinfo;
}

// 按需添加其他jpegli API的导出,比如编码相关的jpegli_create_compress、jpegli_destroy_compress等
  • 右键项目→属性→C/C++→预处理器→预处理器定义:添加JPEGLI_WRAPPER_EXPORTS,确保导出宏生效

步骤3:编译生成DLL

  • 确认项目平台(x86/x64)与jpegli-static.lib的编译平台一致
  • 编译项目,生成jpegli-wrapper.dll,该DLL包含jpegli的完整新API

步骤4:C#中调用DLL(PInvoke示例)

using System.Runtime.InteropServices;

public class JpegliWrapper
{
    // 用IntPtr传递jpegli结构体(如需直接操作结构体,可对应定义C#结构体)
    [DllImport("jpegli-wrapper.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern IntPtr JpegliCreateDecompress();

    [DllImport("jpegli-wrapper.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern void JpegliDestroyDecompress(IntPtr cinfo);

    // 按需添加其他PInvoke方法,对应导出的jpegli API
}

注意事项

  • 若编译出现头文件找不到的错误,检查附加包含目录的路径是否正确
  • 若出现链接错误,确认jpegli-static.lib的路径、平台与项目匹配
  • 导出函数时严格匹配jpegli API的参数类型与返回值,避免类型不匹配导致崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:56:10