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

Flutter Desktop调用第三方C# DLL及32位DLL适配问题求助

Flutter Desktop调用第三方C# DLL及32位适配解决方案

核心问题分析

你遇到的System.EntryPointNotFoundException错误,本质是C# DLL默认是托管程序集,没有原生函数导出表,而FFI和DllImport都是针对原生(非托管)DLL设计的,直接用DllImport引用托管C# DLL的方法必然失败。


方案一:C++/CLI桥接层(推荐)

C++/CLI是.NET和原生代码的中间层,既能调用托管C#代码,又能导出原生函数给Flutter FFI调用,步骤清晰:

  1. 在Visual Studio创建「CLR类库」项目(C++/CLI类型)
  2. 右键项目→添加引用→浏览选择第三方C# DLL
  3. 编写原生导出函数,内部调用C#方法:
#include "pch.h"
using namespace System;
using namespace ClassLibrary1; // 替换为第三方DLL的命名空间

// 导出原生函数,供Flutter FFI调用
extern "C" __declspec(dllexport) int mysum(int a, int b)
{
    return SumClass::sum(a, b); // 调用C#静态方法
}
  1. 项目属性设置为x64平台编译(匹配Flutter Windows的64位要求)
  2. Flutter端调用该C++/CLI生成的DLL,代码如下:
typedef AddFunc = Int32 Function(Int32 a, Int32 b);
typedef Add = int Function(int a, int b);

const dll = 'CppBridge.dll'; // 替换为你的C++/CLI DLL名称
final library = DynamicLibrary.open(dll);
final addPointer = library.lookup<NativeFunction<AddFunc>>('mysum');
final add = addPointer.asFunction<Add>();
final result = add(_counter, 2);

方案二:C#包装器改用反射调用托管DLL

如果坚持用C#做包装,不能用DllImport引用托管DLL,要通过反射加载并调用其方法,修改你的C#包装器代码:

using System.Reflection;

public class Class1
{
    [DllExport]
    public static Int32 mysum(Int32 a, Int32 b)
    {
        // 加载第三方托管DLL(确保路径正确,可使用绝对路径)
        Assembly targetAssembly = Assembly.LoadFrom("ClassLibrary1.dll");
        // 获取目标类和静态方法
        Type sumClass = targetAssembly.GetType("ClassLibrary1.SumClass");
        MethodInfo sumMethod = sumClass.GetMethod("sum", BindingFlags.Public | BindingFlags.Static);
        // 调用方法并返回结果
        return (Int32)sumMethod.Invoke(null, new object[] { a, b });
    }
}

注意:需保证第三方C# DLL与FlutterBridge.dll处于同一目录,或指定完整路径。


32位DLL适配方案

Flutter Windows仅支持64位进程,针对只有32位版本的第三方DLL,有两种可行方案:

  • 进程外调用:编写一个32位的独立服务程序(如控制台应用),让它加载32位DLL,Flutter通过IPC机制(命名管道、Socket、gRPC等)与该服务通信,间接调用DLL功能。
  • 获取64位版本:直接联系读卡器厂商,索要64位版本的DLL,这是最简洁的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:41:01