如何在C程序中消除这个错误? 这个代码在C++中工作得很好,我需要C.的解决方案。

如何在C程序中消除这个错误? 这个代码在C++中工作得很好,我需要C.的解决方案。,c,dll,C,Dll,这是我的样品 FileName:Mail.c 这是我在mail.c文件中的声明 #ifdef __cplusplus typedef int (__cdecl *SetIpAddressFun)(char* , int , int ); typedef bool (__cdecl *SendMailFun)(char * , char *); #endif void func() { SendMailFun sendMailFuncPtr; Set

这是我的样品

 FileName:Mail.c
这是我在mail.c文件中的声明

 #ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif
 void func()
 {
     SendMailFun sendMailFuncPtr;
     SetIpAddressFun setIpAddressFuncPtr;
 }
我在同一个文件mail.c中的func()函数中使用了这个函数指针

 #ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif
 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 
< > >代码> IFDEF,CPLUS PLUS 意味着在使用C++编译器时只能遵守一点点代码。 正是该位定义了函数指针类型
SendMailFun
,因此编译器错误抱怨
SendMailFun
SendMailFun
不存在

您可以从删除这些行开始

#ifdef __cplusplus


这是因为当您声明函数时

#ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif
您只对\uuu cplusplus有条件地执行此操作,这在编译C文件时通常没有定义

编辑


我认为你的第二个问题是关于bool的存在,据我所知,它不是C关键字。考虑将其替换为int

道格拉斯:如果我删除这些行,它将显示以下错误。错误C2143:语法错误:缺失',在“\uu cdecl”e:\projects\avg\apps\ezcepanel I.7-pcpanel from vss\ccode\alarms.c(138):错误C2143:语法错误:缺失'{'e:\projects\avg\apps\ezcepanel i.7-vss\ccode\alarms.c(138):错误C2059:语法错误:')之前的'e:\projects\avg\apps\ezcepanel i.7-vss\ccode\alarms.c(138)中的pcpanel:错误C2165:“左侧修饰符”:无法修改指向数据的指针道格拉斯:如果您无法可视化此评论。请查看问题中的编辑部分。很抱歉,看起来您正在Windows上使用Visual Studio,我对其了解不多,无法提供进一步帮助…您可以尝试删除u cdecl位,但这是p很可能不是这个问题,可能会导致其他问题。道格拉斯:+1感谢你的方法。谢谢你的回复。