关于wince下dll的问题

starlistener 2010-09-20 05:02:21
小弟初学,想问下在wince下开发的dll能不能直接用在winxp程序中,若可以的话该如何才能使用它呢。希望高手能把步骤说详细些。就此谢过!!编程语言是C#,环境是vs2005
...全文
397 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
I520WUCHAN 2010-09-25
  • 打赏
  • 举报
回复
同意楼上的.....
兔子-顾问 2010-09-25
  • 打赏
  • 举报
回复
注意,反过来不行。你如果创建的不是智能设备项目,是无法再ce上运行的。
兔子-顾问 2010-09-25
  • 打赏
  • 举报
回复
没有任何的问题。
要注意2个方面。
1.不要引用Microsoft.WindowsCE.dll和Microsoft.Mobile.Forms.dll。里面的功能自己用api实现。
2.在所有使用p/invoke的地方注意区分操作系统,根据系统调用对应的dll,例如ce下所有的api都在coredll.dll中,但pc下的位置则在user32.dll,kernel32.dll等。
注意以上2点,是一定可以通用的。
我带的项目,做出来的软件就是可以ce/mobile/xp/win7下通用,非常正常。
chazikai24 2010-09-25
  • 打赏
  • 举报
回复
只要编译环境相同就能用!如果你是c#编译的dll,那么在xp下安装相同的.net版本或者更高就能调用
starlistener 2010-09-25
  • 打赏
  • 举报
回复
为什么有些人说可以的呀,有权威人士来说一下么
showjancn 2010-09-25
  • 打赏
  • 举报
回复
不可以,引用的时候会报错。
建议建两个工程,然后用文件引用的方式来实现。
bloodish 2010-09-25
  • 打赏
  • 举报
回复
OpenNETCF里随便找的一个方法,你把Enum.GetNames放到else进去看看,能否编译通过,试试就知道


public static bool CeGenRandom(int dwLen, byte[] pbBuffer)
{
if(System.Environment.OSVersion.Platform == PlatformID.WinCE)
return CeGenRandomCe(dwLen, pbBuffer);
else
{
Random r = new Random(EnvironmentEx.TickCount);
r.NextBytes(pbBuffer);
return true;
}
}
bloodish 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wuyazhe 的回复:]
可不可以我上面说过了。我项目中就这么用的。看懂了对你有帮助,看不懂当我瞎说就行……
[/Quote]

我不否认,如果某个方法Compact Framework和Frameword都支持,你那样写一点问题没有.
但是你没理解使用条件编译的前提,如果一个方法,仅受Framework支持,Compact Framework是不支持的,你能那么写?根本不能编译通过.

兔子-顾问 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bloodish 的回复:]
你觉得能编译过吗,如果你是要生成一个由基于Compact Framework的dll?
如果能编译过,我就无需举那个例子了
[/Quote]
你看看Net Open cf开源项目1.4版本源码。大量这样的写法。就是为了一次编译,通用不同系统的。这样的dll支持ce/windows。
可不可以我上面说过了。我项目中就这么用的。看懂了对你有帮助,看不懂当我瞎说就行了。呵呵。
bloodish 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyazhe 的回复:]
if (Environment.OSVersion.Platform == PlatformID.WinCE)
{
//调用ce的
}
else
{
//调用pc的
}
[/Quote]

你觉得能编译过吗,如果你是要生成一个由基于Compact Framework的dll?
如果能编译过,我就无需举那个例子了
兔子-顾问 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bloodish 的回复:]
用没问题,但个人建议有些代码的处理带上条件编译

比如CE


C# code

#if WindowsCE
//自己实现的GetNames方法
#else
Enum.GetNames(typeof(FormWindowState));
#endif



在CE上,你是无法使用GetNames这个方法的,但是PC上可以.
毕竟Compact Frame……
[/Quote]
你这判断方法不可取,这样要编译2个版本的。你不知道动态的判断么。
if (Environment.OSVersion.Platform == PlatformID.WinCE)
{
//调用ce的
}
else
{
//调用pc的
}
Matrix_Designer 2010-09-25
  • 打赏
  • 举报
回复
只要没引用CE专用的类库,将项目设置改为PC环境后重新编译下就可以了
bloodish 2010-09-25
  • 打赏
  • 举报
回复
用没问题,但个人建议有些代码的处理带上条件编译

比如CE


#if WindowsCE
//自己实现的GetNames方法
#else
Enum.GetNames(typeof(FormWindowState));
#endif


在CE上,你是无法使用GetNames这个方法的,但是PC上可以.
毕竟Compact Framework只能说是FrameWork的一个子集
兔子-顾问 2010-09-25
  • 打赏
  • 举报
回复
看看基础吧。跟com没一点关系。
starlistener 2010-09-25
  • 打赏
  • 举报
回复
我试了下,显示未能添加引用,请确保此文件可访问并且是一个有效的程序集或com组件,怎么回事呢
xjcwzp 2010-09-20
  • 打赏
  • 举报
回复
一般情况下是不兼容的吧

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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