Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 682|回复: 0

System.Data.SQLite.dll不能编译成AnyCPU问题的解决方案,以及它跨x86和x64的使用方法。

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-22 23:16:58 | 显示全部楼层 |阅读模式

            Data.SQLite.dll可以认为是对用C编写的sqlite3.c的.NET平台的封装,由于原sqlite3.dll是区分x86和x64发布的,Data.SQLite.dll一般也会区分x86和x64封装,结果可能会在实际使用时产生麻烦。

            从Data.SQLite.dll的源代码中可以知道,其解决方案中保含两部分的项目,一部分是C#项目,会被生成Data.SQLite.dll和Data.SQLite.Linq.dll;另一部分是C/C++项目,会被生成SQLite.Interop.dll。如果对源代码进行某些配置,结果会生成一个文件,即我们常用的Data.SQLite.dll,这可以从官方网站中的那些标着“bundle”字样的文件中可以看出,而没有这个字样的文件,其中会包含SQLite.Interop.dll。在这两个部分中,C#部分中的“UnsafeNativeMethods.cs”文件中定义了两个部分的关系,即在此文件中通过DllImport来导入SQLite.Interop.dll,而路径可以是当前目录下,或者当前目录的Win32、x86、x64等目录之下。这些就是Data.SQLite.dll的基本内部结构。

            Data.Sqlite.dll的源代码中使用了两种C/C++和C#的交互方式,都可以达到在.NET平台利用C/C++代码的目的。一种是以C#代码为主体,导入C/C++ dll的方式,这样会生成多个dll。另一种以C/C++代码为主体,导入C# module的方式,这样只会生成一个dll。

            由于解决方案中存在C/C++项目,这是不能够生成AnyCPU的,所以引用该dll的程序,如果必须要求生成在AnyCPU中的话,该dll的使用将会出现问题。至今发现的唯一一种解决方案是,把C#项目生成的Data.SQLite.dll、x64目录下的x64版本的SQLite.Interop.dll、x86目录下的x86版本的SQLite.Interop.dll组合在一起使用。使用时,只需要引用Data.SQLite.dll,它的内部会根据当前平台的不同而调用不同的SQLite.Interop.dll,从而达到对AnyCPU都兼容的目的。

            上面所说的方法可以达到跨x86和x64平台的目的,不过如果引用该dll的程序不必要一定在AnyCPU下生成,还有一个更方便的方法,把引用该dll的程序在x86下生成,dll只用已经发布了的32平台的版本即可。

            其它可能出现的问题,例如Debug下正常而Release下不正常、Console下正常而WinForm下不正常、Win32下正常而Win64下不正常等等,如果可以接受用不优化的Debug版本,或者不使用Winform形式的程序,或者只在一个平台下使用,就不必像我说的那样复杂,如果要求很严格,可以试试我在上面所说的方案。

            All Comments are Welcome.

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 04:35 , Processed in 0.060413 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表