在编译C代码时,我收到以下错误:
c:\users\kbarman\documents\mser\vlfeat-0.9.13-try\mser\stringop.c(71): error C2491: 'vl_string_parse_protocol' : definition of dllimport function not allowed
在文件stringop.c中,我有以下功能:
VL_EXPORT char *
vl_string_parse_protocol (char const *string, int *protocol)
{
char const * cpt ;
int dummy ;
/* handle the case prot = 0 */
if (protocol == 0)
protocol = &dummy ;
/* look for :// */
cpt = strstr(string, "://") ;
if (cpt == 0) {
*protocol = VL_PROT_NONE ;
cpt = string ;
}
else {
if (strncmp(string, "ascii", cpt - string) == 0) {
*protocol = VL_PROT_ASCII ;
}
else if (strncmp(string, "bin", cpt - string) == 0) {
*protocol = VL_PROT_BINARY ;
}
else {
*protocol = VL_PROT_UNKNOWN ;
}
cpt += 3 ;
}
return (char*) cpt ;
}
VL_EXPORT的定义如下:
# define VL_EXPORT extern "C" __declspec(dllimport)
有人可以告诉我是什么导致了这个错误以及我如何摆脱它?
答案 0 :(得分:3)
作为documentation states,dllimport
函数不允许在那里拥有正文。
[...]函数可以声明为duntemports 但未定义 dllimports。
// function definition
void __declspec(dllimport) funcB() {} // C2491
// function declaration
void __declspec(dllimport) funcB(); // OK
答案 1 :(得分:1)
你说这个函数是外部的,在Dll中定义。然后你在代码中定义它。这是非法的,因为必须是一个或另一个,但不是外部和内部。
我的猜测是你只需要将dllimport改为dllexport。我假设您正在将此代码构建到库中。