如何在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感谢你的方法。谢谢你的回复。