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

VS2019加载C编写的32位非托管DLL报错,求解决(Win10 64位)

解决32位swedll32.dll在64位系统下的加载失败问题

我之前处理过类似的32位原生DLL在64位Windows环境下的加载问题,结合你描述的情况,给你几个具体的排查和解决方向:

  • 确认DLL的放置位置是否正确
    当你把项目编译目标改为X86后,程序会以32位模式运行,此时它会优先在以下位置查找32位DLL:

    1. 程序的输出目录(比如bin\x86\Debug或bin\x86\Release)的根目录
    2. 系统的SysWOW64文件夹(64位系统中专门存放32位系统DLL的目录,不要放到System32,那是64位DLL的目录)
      你可以用Process Monitor工具跟踪程序加载DLL的行为,看看它实际在哪些路径下查找swedll32.dll,确认是否存在路径不匹配的问题。
  • 检查DLL的依赖项是否完整
    32位的swedll32.dll可能依赖其他32位的运行库(比如老版本的MSVC运行库),你可以用32位版本的Dependency Walker打开这个DLL,查看是否有缺失的依赖项。如果发现有缺失,需要安装对应的32位运行库包。

  • 修正DLL导入的声明方式
    你当前使用的Declare语句在VB.NET中属于较旧的语法,推荐使用更灵活的DllImport属性,同时确保函数名、调用约定完全匹配:

    Imports System.Runtime.InteropServices
    
    Public Class Form1
        <DllImport("swedll32.dll", EntryPoint:="_swe_set_ephe_path@4", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)>
        Public Shared Sub swe_set_ephe_path(ByVal path As String)
        End Sub
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            swe_set_ephe_path(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "SwEph"))
        End Sub
    End Class
    

    另外,你可以用VS自带的dumpbin工具(打开Developer Command Prompt for VS2019)执行以下命令,确认DLL导出的函数名是否和你使用的Alias一致:

    dumpbin /exports swedll32.dll
    
  • 验证DLL文件本身是否完好
    有时候下载的DLL可能损坏,或者被杀毒软件误拦截。建议重新从官方渠道获取32位版本的swedll32.dll,替换到正确位置后,暂时关闭杀毒软件再测试。

  • 尝试兼容性模式运行
    如果以上方法都无效,可能是DLL本身和Win10存在兼容性问题。你可以右键生成的32位EXE文件,选择属性→兼容性,勾选“以兼容模式运行这个程序”,并选择Windows XP SP3或Windows 7,再运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:56:08