不允许定义dllimport函数

时间:2011-10-05 06:37:25

标签: c dllimport

在编译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)

有人可以告诉我是什么导致了这个错误以及我如何摆脱它?

2 个答案:

答案 0 :(得分:3)

作为documentation statesdllimport函数不允许在那里拥有正文。

  

[...]函数可以声明为duntemports 但未定义   dllimports。

// function definition
void __declspec(dllimport) funcB() {}   // C2491

// function declaration
void __declspec(dllimport) funcB();   // OK

答案 1 :(得分:1)

你说这个函数是外部的,在Dll中定义。然后你在代码中定义它。这是非法的,因为必须是一个或另一个,但不是外部和内部。

我的猜测是你只需要将dllimport改为dllexport。我假设您正在将此代码构建到库中。