如何在C程序中消除此错误?

时间:2011-11-21 04:38:01

标签: c dll

这段代码在c ++中运行良好。我需要C语言的解决方案。

这是我的样本。

 FileName:Mail.c

这是我在mail.c文件中做的声明

 #ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif

我在同一个文件mail.c中使用名为func()的函数中的函数指针

 void func()
 {
     SendMailFun sendMailFuncPtr;
     SetIpAddressFun setIpAddressFuncPtr;
 }

修改

如果我删除mail.c文件中的#ifdef行,则显示以下错误。

 error C2143: syntax error : missing ')' before '__cdecl'
 e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(138) : error C2143: syntax error : missing '{' before '__cdecl'
 e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(138) : error C2059: syntax error : ')'
 e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(138) : error C2165: 'left-side modifier' : cannot modify pointers to data

错误

在c。

中编译时发生的错误列表
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1615) : error   C2065: 'SendMailFun' : undeclared identifier

  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1615) : error C2146: syntax error : missing ';' before identifier 'sendMailFuncPtr'

  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1615) : error C2065: 'sendMailFuncPtr' : undeclared identifier
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1616) : error C2065: 'SetIpAddressFun' : undeclared identifier
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1616) : error C2146: syntax error : missing ';' before identifier 'setIpAddressFuncPtr'
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1616) : error C2065: 'setIpAddressFuncPtr' : undeclared identifier
   e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1625) : error C2065: 'setIpAddressFuncPtr' : undeclared identifier
   e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1625) : error C2065: 'SetIpAddressFun' : undeclared identifier
   e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1625) : error C2146: syntax error : missing ';' before identifier 'GetProcAddress'
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1626) : error C2065: 'setIpAddressFuncPtr' : undeclared identifier
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1626) : warning C4047: '!=' : 'void *' differs in levels of indirection from 'int'
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1628) : warning C4013: 'setIpAddressFuncPtr' undefined; assuming extern returning int
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1630) : error C2065: 'sendMailFuncPtr' : undeclared identifier
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1630) : error C2065: 'SendMailFun' : undeclared identifier
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1630) : error C2146: syntax error : missing ';' before identifier 

2 个答案:

答案 0 :(得分:1)

#ifdef __cplusplus表示只有在使用C ++编译器时才能编译代码。

这是定义函数指针类型SendMailFun的位,因此编译器错误抱怨SendMailFunSendMailFun不存在。

您可以先删除

#ifdef __cplusplus

#endif

答案 1 :(得分:1)

这是因为当您声明函数

#ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif

有条件地仅为 __ cplusplus 执行此操作,这通常在编译C文件时未定义

修改

我认为你的第二个问题与 bool 的存在有关,据我所知,这不是 C 关键字。考虑用 int

替换它