几则技巧

Jun 07, 2016 pm 03:35 PM
技巧 解决

几则技巧 这几天帮同事解决了几个问题,写在这里作为备忘,其他朋友也可以参考。 l 建立 UNICODE 的 MFC 工程 (VC6) 。 按正常步骤建立一个 MFC 应用程序工程。 打开 : Project-Settings-C/C 。在 Preprocessor definitions 中定义 UNICODE 和 _UNICODE 两

几则技巧

 

这几天帮同事解决了几个问题,写在这里作为备忘,其他朋友也可以参考。

 

l         建立UNICODEMFC工程(VC6)

按正常步骤建立一个MFC应用程序工程。

 

打开: Project->Settings…->C/C 。在Preprocessor definitions中定义UNICODE_UNICODE两个宏。

 

打开: Project->Settings…->Link。选择Output类别,修改Entry-Point Symbol的值为wWinMainCRTStartup

 

编译应该没有问题了。运行时若出现找不到mfcxxx.dll,从VC的安装文件中拷贝到系统目录就行了。

 

l         DLL内存释放问题(VC6)

Windows下,如果在一个DLL里分配的内存,在另外一个DLL或者在EXE里释放,程序可能会crash。这时多半是因为这些DLLEXE链接了不同的运行库,不同运行库的堆是不同的,在一个堆里分配的内存,在另外一个堆里释放,就会crash。解决方案有两个:

 

方案一:打开: Project->Settings…->C/C 。选择Code Generation类别,确保所有工程的Use run-time library的值是一致。

 

方案二:哪里分配就在哪里释放。DLL提供了分配函数,同时提供一个释放函数,这样可以确保在同一个堆里释放。

 

l         抽象工厂模式的一个实例。

同事在开发手机的PC模拟环境时,遇到这样一个问题:其可能通过串口与另外一个真实的手机通信,也可能通过Socket与另外一个模拟手机通信。由配置文件决定实际的通信方式。

 

首先自然会想到,建立一个抽象基类Stream,一个继承Stream的子类SerialPortStream,实现串口通信,和一个继承Stream的子类SocketStream,实现Socket通信。调用者通过抽象基类Stream的指针去调用不同子类的实现,从而避免大量if/else语句。

 

但是有好几地方都要创建这些对象,由于创建时仍然要关心具体的子类,前面的方法仍然不够完美。为了避免这些创建代码分散在不同的地方,可以采用抽象工厂模式。程序运行时,根据配置文件创建一个工厂对象,后面通过抽象工厂的指针去创建不同的子类。这样,调用者与实现者之间的耦合降到了最低。

 

l         DBUS marshal函数的参数个数。

DBUSglib封装的marshal函数,与glib原生的marshal完全一样。比如:

void

g_cclosure_marshal_VOID__INT (GClosure     *closure,

                              GValue       *return_value,

                              guint         n_param_values,

                              const GValue *param_values,

                              gpointer      invocation_hint,

                              gpointer      marshal_data)

{

  typedefvoid (*GMarshalFunc_VOID__INT) (gpointer     data1,

                                         gint         arg_1,

                                        gpointer     data2);

  注册 GMarshalFunc_VOID__INT 回调;

  注册 GCClosure *cc = (GCClosure*) 闭包;

  注册 gpointer data1, data2;

 

  g_return_if_fail (n_param_values == 2);

 

  if (G_CCLOSURE_SWAP_DATA (闭包))

    {

      data1 = 闭包->数据;

      data2 = g_value_peek_pointer (param_values 0);

    }

  其他

    {

      data1 = g_value_peek_pointer (param_values 0);

      data2 = 闭包->数据;

    }

  回调 = (GMarshalFunc_VOID__INT) (marshal_data ? marshal_data : cc->回调);

 

  回调(data1,

            g_marshal_value_peek_int (param_values 1),

            data2);

}

 

语句g_return_if_fail (n_param_values == 2);有些让人迷惑,明明只有一个参数,为什么参数个数是2个。从这个函数的实现可以看出,第一个参数始终是对象本身,虽然signal只有一个参数,加上对象指针本身,参数个数变成2个了。

 

l         安装FC5的内核源码。

[root@localhost ~]# rpm -ivh kernel-2.6.15-1.2054_FC5.src.rpm

[root@localhost ~]# cd /usr/src/redhat/SPECS

[root@localhost SPECS]# rpmbuild -bp --target=i686 kernel-2.6.spec

[root@localhost SPECS]# cd ../BUILD/kernel-2.6.15/linux-2.6.15.i686/

[root@localhost linux-2.6.15.i686]# make menuconfig

[root@localhost linux-2.6.15.i686]#make

[root@localhost linux-2.6.15.i686]# rm /lib/modules/2.6.15-1.2054_FC5/build

[root@localhost linux-2.6.15.i686]# ln /lib/modules/2.6.15-1.2054_FC5/build  /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686/ -s

 

 

 

 

 

 

 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

五招教你解决黑鲨手机开不了机的问题! 五招教你解决黑鲨手机开不了机的问题! Mar 24, 2024 pm 12:27 PM

随着智能手机技术的不断发展,手机在我们日常生活中扮演着越来越重要的角色。而作为一款专注于游戏性能的旗舰手机,黑鲨手机备受玩家青睐。然而,有时候我们也会面临到黑鲨手机开不了机的情况,这时候我们就需要采取一些措施来解决这一问题。接下来,就让我们来分享五招教你解决黑鲨手机开不了机的问题:第一招:检查电池电量首先,确保你的黑鲨手机有足够的电量。可能是因为手机电量耗尽

小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? 小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? Mar 22, 2024 am 08:06 AM

随着社交媒体的不断发展,小红书已经成为越来越多年轻人分享生活、发现美好事物的平台。许多用户在发布图片时遇到了自动保存的问题,这让他们感到十分困扰。那么,如何解决这个问题呢?一、小红书发布自动保存图片怎么解决?1.清除缓存首先,我们可以尝试清除小红书的缓存数据。步骤如下:(1)打开小红书,点击右下角的“我的”按钮;(2)在个人中心页面,找到“设置”并点击;(3)向下滚动,找到“清除缓存”选项,点击确认。清除缓存后,重新进入小红书,尝试发布图片看是否解决了自动保存的问题。2.更新小红书版本确保你的小

Win11小技巧分享:一招跳过微软账户登录 Win11小技巧分享:一招跳过微软账户登录 Mar 27, 2024 pm 02:57 PM

Win11小技巧分享:一招跳过微软账户登录Windows11是微软最新推出的操作系统,具有全新的设计风格和许多实用的功能。然而,对于一些用户来说,在每次启动系统时都要登录微软账户可能会感到有些烦扰。如果你是其中一员,不妨尝试一下以下的技巧,让你能够跳过微软账户登录,直接进入桌面界面。首先,我们需要在系统中创建一个本地账户,来代替微软账户登录。这样做的好处是

新手制作表格有哪些技巧 新手制作表格有哪些技巧 Mar 21, 2024 am 09:11 AM

我们经常在excel中制作和编辑表格,但是作为一个刚刚接触软件的新手来讲,如何使用excel制作表格,并没有我们使用起来那么轻松。下边,我们针对新手,也就是初学者需要掌握的表格制作的一些步骤进行一些演练,希望对需要的人有些帮助。新手表格示例样板如下图:我们看看如何来完成!1,新建excel文档,有两种方法。可以在【桌面】空白位置,点击鼠标右键-【新建】-【xls】文件。也可以【开始】-【所有程序】-【MicrosoftOffice】-【MicrosoftExcel20**】2,双击我们新建的ex

老手必备:C语言中*和&的技巧与注意事项 老手必备:C语言中*和&的技巧与注意事项 Apr 04, 2024 am 08:21 AM

C语言中,表示指针,存储其他变量的地址;&表示地址运算符,返回变量的内存地址。指针的使用技巧包括定义指针、解引用指针,需确保指针指向有效地址;地址运算符&的使用技巧包括获取变量地址,获取数组元素地址时返回数组第一元素地址。实战案例说明了使用指针和地址运算符反转字符串。

VSCode入门指南:初学者必读,快速掌握使用技巧! VSCode入门指南:初学者必读,快速掌握使用技巧! Mar 26, 2024 am 08:21 AM

VSCode(VisualStudioCode)是一款由微软开发的开源代码编辑器,具有强大的功能和丰富的插件支持,成为开发者们的首选工具之一。本文将为初学者们提供一个入门指南,帮助他们快速掌握VSCode的使用技巧。在本文中,将介绍如何安装VSCode、基本的编辑操作、快捷键、插件安装等内容,并为读者提供具体的代码示例。1.安装VSCode首先,我们需

黑鲨手机充电故障排查与解决 黑鲨手机充电故障排查与解决 Mar 22, 2024 pm 09:03 PM

黑鲨手机是一款以性能强悍、游戏体验出色而著称的智能手机品牌,备受广大游戏玩家和科技爱好者的喜爱。然而,就像其他智能手机一样,黑鲨手机也会出现各种问题,其中充电故障是比较常见的一种。充电故障不仅会影响手机的正常使用,还可能引发更严重的问题,因此及时解决充电问题十分重要。本文将从常见的黑鲨手机充电故障原因入手,介绍排查和解决充电问题的方法,希望能帮助读者解决黑鲨

PHP编程技巧:如何实现3秒内跳转网页 PHP编程技巧:如何实现3秒内跳转网页 Mar 24, 2024 am 09:18 AM

标题:PHP编程技巧:如何实现3秒内跳转网页在Web开发中,经常会遇到需要在一定时间内自动跳转到另一个页面的情况。本文将介绍如何使用PHP实现在3秒内实现页面跳转的编程技巧,并提供具体的代码示例。首先,实现页面跳转的基本原理是通过HTTP的响应头中的Location字段来实现。通过设置该字段可以让浏览器自动跳转到指定的页面。下面是一个简单的例子,演示如何在P

See all articles