关于typedef的问题

好大一个土豆 2015-07-17 03:59:31
一个DLL中有一个函数:
RECOFACERECOG_API int Face_Init(const char* path, RecoModuleHandle* module_handle);

其中RECOFACERECOG_API在头文件中这样定义:
#ifdef __linux
#define RECOFACERECOG_API
#else

#ifdef RECOFACERECOG_EXPORTS
#define RECOFACERECOG_API __declspec(dllexport)
#else
#define RECOFACERECOG_API __declspec(dllimport)
#endif


现在我想动态调用这个DLL,调用Face_Init这个函数,为什么我这样先定义个别名不行?
typedef int (__stdcall Face_Init)(const char* path, RecoModuleHandle* module_handle);

编译时出现的错误是:
error C2378: 'Face_Init' : redefinition; symbol cannot be overloaded with a typedef
f:\exp\cvsc++\testface\recocommon.h(111) : see declaration of 'Face_Init'

求路过的大神帮忙看看,感激不尽!
...全文
205 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
好大一个土豆 2015-07-17
  • 打赏
  • 举报
回复
引用 2 楼 Saleayas 的回复:
动态调用,不需要使用 .h 和 .lib 文件的。
谢谢! 我调用程序用到了好多那个dll的头文件定义的结构体,所以把dll的头文件也包含进去 了。然后就导致了重名。
好大一个土豆 2015-07-17
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
RECOFACERECOG_API int Face_Init(const char* path, RecoModuleHandle* module_handle); typedef int (__stdcall Face_Init)(const char* path, RecoModuleHandle* module_handle); 上面红色的或蓝色的那个字串 其中一个改成别的名称
非常感谢!原来是这里。 因为用到了好多那个DLL中的定义的结构体,所以把他的头文件也include进去了,而那个头文件里有Face_Init这个函数的声明,所以typedef就重名了。以前都没把头文件包含进去,所以同名也没问题。
Saleayas 2015-07-17
  • 打赏
  • 举报
回复
动态调用,不需要使用 .h 和 .lib 文件的。
worldy 2015-07-17
  • 打赏
  • 举报
回复
RECOFACERECOG_API int Face_Init(const char* path, RecoModuleHandle* module_handle); typedef int (__stdcall Face_Init)(const char* path, RecoModuleHandle* module_handle); 上面红色的或蓝色的那个字串 其中一个改成别的名称

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧