определение функции dllimport не допускается - PullRequest
4 голосов
/ 05 октября 2011

При компиляции кода 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 ]

3 голосов
/ 05 октября 2011

Как указано в документации , функция , dllimport не может иметь тело прямо там.

[...] функции могут быть объявлены как dllimports , но не определены как dllimports.

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

// function declaration
void __declspec(dllimport) funcB();   // OK
1 голос
/ 05 октября 2011

Вы говорите, что функция является внешней, определенной в Dll. И тогда вы определяете это в своем коде. Это незаконно, поскольку должно быть одно или другое, но не как внешнее, так и внутреннее.

Полагаю, вам просто нужно изменить dllimport на dllexport. Я предполагаю, что вы встраиваете этот код в библиотеку.

...