救命,郁闷了好几天了。无法找到 PInvoke DLL“sqlceme30.dll”!

triffang 2009-11-15 04:38:53
加精
我用的是vs2005开发手持终端windows ce 5.0下的程序,链接数据库提示。
无法找到 PInvoke DLL“sqlceme30.dll” 。
在网上找了很多文章,还是解决不了!各位大哥,救命!郁闷了好几天了。

我按照以下方法做了还是不行。
无法找到 PInvoke DLL“sqlceme30.dll” 转载自:http://blog.csdn.net/oohyes/archive/2009/01/08/3736239.aspx



原文:Can’t find P/Invoke DLL sqlcemeNN.dll
作者:Laxmi Narsimha Rao ORUGANTI
翻译:flyjimi

我知道这是一个烦人的、信息不足、不具指导性、……的错误。原谅我这么迟才blog这个错误。迟做比不做好,下面就是了。
目前的错误是什么?
1) Can't find P/Invoke DLL sqlceme30.dll
2) Can't find P/Invoke DLL sqlceme35.dll
3) Can't find P/Invoke DLL sqlceme40.dll
这个错误到底什么意思?
当一个托管组件(这里是System.Data.SqlServerCe.dll)试图调用一个原生DLL(这里是sqlcemeNN.dll,NN代表产品的版本号30,35,等),系统没有找到那个要装载并调用其方法的DLL。
何时我们会碰到这个错误?
当系统在系统目录或当前进程的执行目录找不到需要的DLL时,就会出现这个错误。
如何处理这个错误?可能的修复方法是什么?
有多种情况,下面是最常见的:
1) 在.NET CF SP2之前,在存储卡上没有GAC的概念。如果你在存储卡上安装了SQL CE,在设备上安装了.NET CF 2.0 RTM/SP1,结果原生DLL就在存储卡上,而GAC在主存。因此,托管组件调用方法就会失败。
a. 请使用.NET CF SP2以上版本。
b. 请在主存储器安装cab文件。
c. 请更新到SQL CE 3.0 SP2/3.1或以上。
2) 你在开发智能设备(基于Windows CE操作系统)上的应用程序,并且使用了Visual Studio自动部署(F5)特性。VS在把System.Data.SqlServerCe.dll 映射到CAB文件时失败,只部署了System.Data.SqlServerCe.dll(注意:不会报错)。在这种情况下,原生DLL没有部署。
a. 取消自动部署。 (别问我怎么做)
b. 从项目中移除,然后重新添加 System.Data.SqlServerCe 的引用。 因为, VS 在项目文件保存了组件id. 而我们改变了SQL CE 3.5 SP1中的组件版本,移除再添加就会更新解决方案,引用正确的组件版本。
c. 手动拷贝安装SQL CE 的所有3个CAB文件,它们在以下目录:
%VisualStudioInstallRoot%\SmartDevices\SDK\SQL Server\Mobile\v3.5\ <platform>\ <processor>

%ProgramFiles%\Microsoft SQL Server Compact Edition\3.5\Devices\ <platform>\ <processor>
3) 系统加载sqlcemeNN.dll.失败。关于为什么系统加载模块失败的更多的细节,在我之前的一个blog(译注:中文翻译在这里)中有讨论。
4) 如果你的机器是64位的,你可能陷入了默认的目标平台“任何CPU”的陷阱,请设置目标平台为“x86”。如需要更多详情,请访问ErikEJ的博客。
5) 对于所有其他的情况,请升级到SQL CE 3.0 SP2/3.1 以上。如果可能,确保HKLM\Software\Microsoft\Microsoft SQL Server Compact Edition\<Version>\NativeDir 注册表指向原生DLL的安装目录。如果运行在WoW模式,请考虑WoW注册表。
致谢,

...全文
4056 69 打赏 收藏 转发到动态 举报
写回复
用AI写文章
69 条回复
切换为时间正序
请发表友善的回复…
发表回复
caomuhui123 2012-04-07
  • 打赏
  • 举报
回复
以前遇到过 wince6.0 提示sqlceme35.dll找不到 后来解决了 可以看看 http://aigudao.net/?post=6
wxzcwxzc 2010-09-18
  • 打赏
  • 举报
回复
我也这个问题。应该是安装SQLCe这些文件后,不能断电 冷启动的原因吧
xuxun1987 2010-08-31
  • 打赏
  • 举报
回复
每天回帖能得10分?
a472198674 2010-08-16
  • 打赏
  • 举报
回复
复制了sqlceme30.dll到应用的exe傍边,这个错误没了。在出现了一个新的异常,“sqlceme30.sys.dll”,然后创建数据库失败。
代码如下:

static void Main(string[] args)
{
if (File.Exists(@"/windows/CEDBTest.sdf"))
File.Delete(@"/windows/CEDBTest.sdf");
string connStr = "Data Source =/windows/CEDBTest.sdf; Password = <password>";

SqlCeEngine engine = new SqlCeEngine(connStr);
try
{
engine.CreateDatabase();
}
catch {
Console.WriteLine("fail to create!");
}
engine.Dispose();
}


请大侠们解决啊
a472198674 2010-08-16
  • 打赏
  • 举报
回复
已经解决,请到我空间博客查看
loveSoftandhxy 2010-06-25
  • 打赏
  • 举报
回复
解决了吗?
xjc99172440 2010-06-21
  • 打赏
  • 举报
回复
我怎么没有那个目录啊
fangpi20062468 2010-04-26
  • 打赏
  • 举报
回复
我也这样了
gvb1314 2010-04-15
  • 打赏
  • 举报
回复
可以去这看看
http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/001972c3-b78e-4abc-a0f6-6104de8b9480
sql.ppc.wce4.armv4.CAB - PPC 2003

sql.phone.wce5.armv4i.CAB - WM 5.0

C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v2.0\wce400\armv4
homefin 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 programmerno1 的回复:]
引用 42 楼 triffang 的回复:同样的代码,在PPC上能部署,在wince下不行,狗日的!

把微软干掉,呵~~~
[/Quote]
支持!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
jy02411368 2010-01-05
  • 打赏
  • 举报
回复
哎 相当的郁闷啊 我是部署到仿真器 好好的 拿到真的设备上就不行了 我怀疑是要给设备上 装个什么东西才可以
triffang 2009-12-02
  • 打赏
  • 举报
回复
结贴了!
triffang 2009-12-02
  • 打赏
  • 举报
回复
妈的,仿真器是会存在这个问题!
但部署到真正的设备,不会存在这个问题!
aimie 2009-11-30
  • 打赏
  • 举报
回复
以前我用PHP连接SQL2005的时候也是不上,连SQL2000却可以,后来用2000的一个DLL替换2005的一个用于连接用的DLL就可以了,高版本竟不向下兼容,也可能是有人改了那个DLL吧,谁知道呢。
所以你的问题是否是其它原因造成的,用另外一种思维考虑一下看看。
CJoneL 2009-11-27
  • 打赏
  • 举报
回复
郁闷啊!小弟也遇到了这个问题!
Can't find PInvoke DLL
期待大侠的解答!
bin13505175228 2009-11-21
  • 打赏
  • 举报
回复
UP
chnnch 2009-11-21
  • 打赏
  • 举报
回复
关注中,看看问题如何解决。。。。
ProgrammerNO1 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 laiyiling 的回复:]
引用 36 楼 life923 的回复:

C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\Client\wce500\armv4i 下面的 sqlceme30.dll  复制到你exe程序 的同一目录 就可以了


这个思路是正确的!

你可以把需要的DLL当资源文件加入工程,然后把属性修改为Copy if newer。Rebuild All就可以了。今天刚刚解决了一个和你完全一样的问题.......
[/Quote]

pc下的方法,在这里未必行得通

LZ是这样么,试了没
ying1856 2009-11-21
  • 打赏
  • 举报
回复
慢慢的看
rangkarmen 2009-11-20
  • 打赏
  • 举报
回复
总结中。
加载更多回复(47)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧