Comstackr une bibliothèque C avec Visual Studio 2010

J’ai ici une bibliothèque C écrite par quelqu’un d’autre, avec un très bon moyen de la comstackr sur un Mac et de générer un wrapper Ruby.

Je suis sous Windows et je dois générer un wrapper pour .Net. Je ne sais absolument rien du C ou du C ++.

  • J’ai créé un fichier xxx_wrapper.c fichier .h , et j’ai utilisé Swig pour générer des fichiers C # et un fichier xxx_wrapper.c .
  • J’ai créé un projet C ++ vide avec Visual Studio 2010 et inclus tous les fichiers .h et .c du projet (à l’exception de ceux générant le wrapper ruby).
  • Maintenant, lorsque j’essaie de comstackr, je reçois quelques erreurs de compilation chaque fois qu’il y a une fonction inline:

    file.c(54): error C2054: '(' expected after 'inline'
    file.c(54): error C2085: 'swap_img' : is not in the formal parameters list
    file.c(54): error C2143: syntax error: missing ';' before '{'

J’ai lu ici que c’est peut-être parce que VS essaie de comstackr mes fichiers c en tant que c ++. Mais comment je fais ça? Je ne peux rien changer dans le code (et je n’essayerais pas), je dois donc simplement “réparer” le projet.

Merci !

Dans la version du langage C prise en charge par Visual Studio 2010, il n’y a pas de mot en inline . Seul C ++ a inline . Je ne pense pas que inline devenu une partie de C jusqu’à la toute dernière version de la norme C (C11), que personne ne prend encore en charge.

Au lieu de cela, vous devriez utiliser le mot __inline , qui signifie la même chose. Les caractères de soulignement impliquent qu’il s’agit d’une “extension”, quelque chose qui ne fait pas partie de la norme C.

Vous pouvez également mettre #define inline __inline au début de chaque fichier ou dans un fichier d’en-tête .h qui est #include d au début. Cela traduirait automatiquement le mot inline en __inline chaque fois qu’il apparaît.

(Il est probable que la personne qui a écrit ce code utilisait un compilateur différent, un compilateur qui a choisi d’append inline sans les traits de soulignement. C’est toujours une “extension” car il ne fait pas partie du Standard C.)