win32程序中程序出错的修正方法

VC++操作mysql的完整配置流程(针对win32程序补充)

前几天写过一篇VC++操作mysql的配置流程的文章,还存在不足,这里进行补充。

因为以前所说的配置在控制台程序(console application)运行没有问题,但想在窗口程序(win32 applicationMFC)运行就出问题了。下面就将程序调试的出错信息和解决方法列出:

1fatal error C1010: unexpected end of file while looking for precompiled header directive

Error executing cl.exe

这个错误一般新手——像我才会遇到的,原因在于添加c++程序文件中没有加入预编译头文件。有两种解决办法:

一、右键点工程名,选设置,然后选c/c++属性页,再选catagory选单中选 precompiled header ,将选项置成no use 或者autometic。二、在出错的程序文件开头(在其他头文件添加语句之前,否则会影响其他头文件的连入)加入#include “stdafx.h” 。详细了解可以参考网文http://www.cppblog.com/wrhwww/archive/2009/02/20/74374.aspx 

2c:\program files\microsoft visual studio\vc98\include\mysql_com.h(184) : error C2146: syntax error : missing ';' before identifier 'fd'

c:\program files\microsoft visual studio\vc98\include\mysql_com.h(184) : error C2501: 'SOCKET' : missing storage-class or type specifiers

c:\program files\microsoft visual studio\vc98\include\mysql_com.h(184) : error C2501: 'fd' : missing storage-class or type specifiers

c:\program files\microsoft visual studio\vc98\include\mysql_com.h(354) : error C2065: 'SOCKET' : undeclared identifier

c:\program files\microsoft visual studio\vc98\include\mysql_com.h(354) : error C2146: syntax error : missing ')' before identifier 's'

c:\program files\microsoft visual studio\vc98\include\mysql_com.h(355) : error C2059: syntax error : ')'

Error executing cl.exe.

win32data.exe - 6 error(s), 0 warning(s)

这个错误相信很多人遇到吧。

根据这个错误提示,查看mysql_com.h 184行,有my_socket fd;的变量定义语句,根据一般经验可以推断是my_socket 这个变量类型没有定义。

于是溯流而上,查看my_socket的定义,可右键单击->GO to definition of my_socket,如果查找不到就只能手动查找。最后可以在mysql.h中找到这段代码:

#ifndef my_socket_defined

#ifdef __WIN__

#define my_socket SOCKET

#else

typedef int my_socket;

#endif /* __WIN__ */

#endif /* my_socket_defined */

通过解读前后预编译语句,可推出my_socket_defined没有声明而__WIN__已声明,也就是说这里my_socket已经过声明为SOCKET了。

于是再溯流而上,查看SOCKET的定义,类似前面的方法,可以发现在winsock.h35行有:typedef u_int           SOCKET;

而且就在刚才的文件里,即mysql.h34行处有这样的代码:

#ifdef __LCC__

#include <winsock.h>                             /* For windows */

#endif

于是可以这样推理:my_socket没有声明 => SOCKET没有声明 => #include <winsock.h>没有运行到 => __LCC__没有声明

于是解决方法就出来了:

一、在包含mysql.h文件的开头(在#include “mysql.h”之前)加入这样的预编译语句:

#ifndef __LCC__

#define __LCC__

#endif

即声明__LCC__使程序能执行到#include <winsock.h> 

二、直接在mysql_com.h里面加入typedef unsigned int my_socket; ,进行my_socket声明。

不过本人还是偏向于使用第一张方法。

自此解决了问题,win32MFC程序可以正常使用mysql API操作mysql数据库了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值