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

如何修改C#代码通过COM Wrapper调用32位DLL适配64位Excel

64位Excel调用32位DLL的COM Wrapper实现步骤

你当前的C#代码只是一个空的COM服务器框架,还未关联到目标32位DLL,按以下步骤修改并完成配置:

1. 调整C#项目编译模式

  • 右键项目 → 属性 → 生成 → 目标平台选择x86(必须以32位模式编译才能加载32位DLL)
  • 勾选“注册COM互操作”选项,简化后续注册流程

2. 在C#代码中接入32位DLL

假设你的32位DLL名为Your32BitDll.dll,包含需要调用的目标函数(比如TargetFunction),修改代码如下:

using System;
using System.Runtime.InteropServices;

namespace FileUtils
{
    [ComVisible(true)]
    [Guid("56075aeb-2f20-41d7-b9c5-e41bfd32c8b1")]
    public interface IFileUtils
    {
        string GetFileName(string path);
        // 新增:声明要暴露给Excel的32位DLL方法接口
        int Call32BitTarget(int inputParam);
    }

    [ComVisible(true)]
    [Guid("6d0cadce-a2f1-45fd-964d-fc0219d18c7e")]
    [ProgId("Lib.FileUtils")]
    public class FileUtils : IFileUtils
    {
        // 导入32位DLL中的目标函数,参数/返回值需与DLL定义完全匹配
        [DllImport("Your32BitDll.dll", CallingConvention = CallingConvention.Cdecl)]
        private static extern int TargetFunction(int input);

        public string GetFileName(String path) => System.IO.Path.GetFileName(path);

        // 封装DLL函数,通过COM接口暴露给外部调用
        public int Call32BitTarget(int inputParam)
        {
            return TargetFunction(inputParam);
        }
    }
}
  • 替换Your32BitDll.dll为实际DLL文件名,TargetFunction为DLL中的真实函数名
  • 若32位DLL不在项目输出目录,需在DllImport中指定完整路径,或把DLL复制到项目的bin/x86/Debug/Release文件夹下

3. 注册32位COM服务器

因为是32位组件,必须使用32位版本的注册工具:

  • 找到系统中对应.NET版本的RegAsm.exe,比如.NET Framework 4.x的路径为C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
  • 以管理员身份打开命令提示符,执行:
RegAsm.exe /codebase "你的项目输出路径\FileUtils.dll"
  • 若编译时已勾选“注册COM互操作”,可跳过手动注册,但手动执行能避免权限或路径问题

4. 在64位Excel中调用COM组件

打开Excel VBA编辑器,添加测试代码:

Sub Test32BitDllCall()
    Dim comObj As Object
    Set comObj = CreateObject("Lib.FileUtils")
    
    ' 测试原有方法
    MsgBox comObj.GetFileName("C:\Demo\test.docx")
    
    ' 测试32位DLL方法
    MsgBox comObj.Call32BitTarget(456)
End Sub
  • 运行宏即可通过COM Wrapper间接调用32位DLL

核心注意事项

  • 64位Excel无法直接加载32位DLL,必须通过32位COM服务器作为中间层,COM会自动处理跨进程调用逻辑
  • 确保32位DLL的所有依赖文件都存在,否则会出现运行时加载失败的错误
  • 注册COM组件时必须使用管理员权限,否则会因权限不足导致注册失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:47:23