首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(0) | 引用(0) | 阅读2245次
在VB、VC中不一致的TRUE和FALSE

无论是用VB编程,还是用VC编程,http://www.shengfang.org大家对布尔类型非常熟悉了,可是大家是否注意到这布尔类型在VB和VC中的不同之处?

请看如下代码:

UINT MakePdu(BOOL b)
{
 if (b==TRUE)
   AfxMessageBox("TRUE");
 else
   AfxMessageBox("FASLE");
 return 1;
}
这是一段非常简单的代码,根据http://www.shengfang.org布尔类型参数分别弹出不同的对话框,如果你只是在VC中使用这段代码,那么不会有问题,可是,如果你制作成DLL提供给VB调用,那么就会发现问题了(其实我个人认为这段代码还存在一个比较大的问题)。

用VC新建一个WIN32 DLL工程:BlDll,加入上面那段代码(记得在函数申明中加入 WINAPI),在DEF文件中EXPORTS后加入MAKEPDU以导出函数,http://www.shengfang.org编译生成BLDLL.DLL文件。

用VB新建一个标准EXE:TSTBLDLL,http://www.shengfang.org在窗体加入一个按钮,然后增加如下代码:

Private Declare
Function MakePdu Lib "BLDL.dll" (ByVal b As Boolean) As Integer
(如果你不喜欢将DLL拷贝到系统目录下,那么应该加上文件所在的目录名)

Private Sub Command1_Click()
MakePdu True
MakePdu False
End Sub

这段代码也非常简单,http://www.shengfang.org申明MAKEPDU函数,然后在点击按钮中调用,传递VB的布尔类型作为参数。

根据上面的VC代码,http://www.shengfang.org我们可以预测到按下按钮后应该先弹出TRUE的对话框,再弹出FALSE对话框。那么请按下按钮吧。

很吃惊吧,让你失望了,弹出的是两个FALSE对话框!

现在让我们开始调试DLL找出原因。http://www.shengfang.org

首先关掉VB(当然要保存工程文件)

在VC的if (b==TRUE)处按下F9键设置断点,http://www.shengfang.org然后按下F5键开始执行DLL,当然DLL不能执行,VC会提示选择一个执行文件进行调试,选择VB6.EXE。

在VB中打开TSTBLDLL工程,运行并按下按钮。http://www.shengfang.org

在VC中你会发现原来VB传过来的True并不是如同想象中一样是1,而是0xffffffff。

现在真相大白了,在VC中布尔类型的TRUE就是1,而在VB中却是-1!

因此我们在编制VC动态连接库提供VB调用时,请注意不要使用布尔类型,用别的类型进行替代。

其实有一个更简单的解决办法,http://www.shengfang.org因为不论是VC还是VB,都会把0认为是FALSE,其他非0值认为是TRUE,因此只要把if (b==TRUE)改为if(b)也可以让程序执行正常。但是本人保留这种做法,一个从代码角度来讲,对于别人使用上,很容易让人产生混淆,究竟是满足那种条件代表TRUE呢?另外一个在可扩充性上比较差,因为使用BOOL意味着只能满足两种条件,如果以后条件进行了扩展,布尔类型就没有办法解决了。当然,http://www.shengfang.org这只是我个人的看法,希望和大家讨论。


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/vb6vc6truefalse.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1110950972

2005年3月16日13:29星期三  [Dev开发] 追踪此文的RSS
提示:
此文还没有评论。

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告





统计信息
[Yippee]||[统计]||日志:2143
在线: 10||用户: 2635 [列表]
今日:711||到访:3654496
Rss:||评论:1668

最新日志

最新评论

友情链接

日历
342009 - 0734
   1234
567891011
12131415161718
19202122232425
262728293031 

最新引用
搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8