4201|6

57

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince下的开发 [复制链接]

大家好,最近刚开始接触wince下的开发,遇到一些问题,不知如何解决,期待各位高手能给予指点,不胜感激。

下面是一段代码,是关于调用系统函数来实现一个功能,但我看的不是很明白,不知道是什么意思,望有过开发经验的或是对系统函数比较了解的能给我一点意见和启发,谢谢!

    [DllImport("coredll.Dll")]
        private static extern int GetLastError();

        [DllImport("coredll.Dll")]
        private static extern int ReleaseMutex(IntPtr hMutex);

        [DllImport("coredll.Dll")]
        private static extern IntPtr CreateMutex(
        SECURITY_ATTRIBUTES lpMutexAttributes,
        bool bInitialOwner, string lpName);

        [StructLayout(LayoutKind.Sequential)]
        public class SECURITY_ATTRIBUTES
        {
             public int nLength;
             public int lpSecurityDescriptor;
             public int bInheritHandle;
        }

        private const int ERROR_ALREADY_EXISTS = 0183;

        public static void Run()
        {
            IntPtr hMutex = CreateMutex(null, false, "ZJS_FJ");
            if (GetLastError() != ERROR_ALREADY_EXISTS)
            {
                System.Windows.Forms.Application.Run(new FrmWel());
                return;
            }
            else
            {
                ReleaseMutex(hMutex);
                return;
            }
        }
说明一下,frmwel是新建的一个窗体,相当于登陆一样。
另外,他的这个解决方案好像没有Program.cs那个类,一般windows应用程序在那里面设置起始页面,对吧?可他每个窗体页面好像都有一个应用程序的主入口点,如:
                   ///
                /// 应用程序的主入口点。
                ///

                static void Main()
                {
                          Mutex.Run();//mutex就是上面包含run()方法的那个类的名字
                          Application.Run(new FrmLog(iMenuId)); //frmlog是一个新的窗体
     
                }
基本情况就是这样,我没怎么接触过系统函数,望大家说的时候不要说的太高深,说的清晰明白就可以了。谢谢!

最新回复

群:21665782 开源空间  大家一起交流wince开发  详情 回复 发表于 2010-6-24 10:44
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你要说什么,这只是C#调用DLL而已呀
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是啊,是调用dll,我就是问调用这个dll的作用是什么?
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

4
 
都是调用一些内核函数,看看帮助里面有这些函数的说明吗?没有的话google搜索一下看看
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
最开始的3个“DllImport”
是为了接下来使用如下三个系统API函数。
GetLastError
ReleaseMutex
CreateMutex
(话说如果是c++,这三个函数可以直接拿来用的,
谁让c#不能够直接操作底层了呢)
这三个函数具体是干什么用的,你可以查看MSDN。

  1.   IntPtr hMutex = CreateMutex(null, false, "ZJS_FJ");
  2.   if (GetLastError() != ERROR_ALREADY_EXISTS)
  3.   {
  4.      System.Windows.Forms.Application.Run(new FrmWel());
  5.      return;
  6.   }
  7.   else
  8.   {
  9.      ReleaseMutex(hMutex);
  10.      return;
  11.   }
复制代码

CreateMutex是创建一个互斥体,
关于互斥体的用处,其实是为了协调共享资源的访问。
GetLastError可以用来查看代码执行所发生的错误。
这里就是先创建一个名为“ZJS_FJ”的互斥体
如果它已经存在则
  {
     ReleaseMutex(hMutex);
     return;
  }
如果该互斥体不存在,则:
System.Windows.Forms.Application.Run(new FrmWel());
c#不大懂,这句话的具体功能不敢瞎说了。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
恩,虽然最后一个问题没有解决,但你说的还好,请问你是做c++的,还是其他的,有机会向你多请教一些底层的东西。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
群:21665782 开源空间  大家一起交流wince开发
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表