Понимание и исправление этого сообщения об ошибке при использовании BOOST_DLL_ALIAS - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь создать плагины, используя boost, и у меня возникли некоторые трудности с его запуском. Я следую этому учебнику с boost.org.Я использую boost 1_70, скомпилированный с Visual Studio 2015. Это мой код для интерфейса IFoo.h:

#include <string>
#include <boost/config.hpp>
//Pluggin Interface for Puffs
class BOOST_SYMBOL_VISIBLE IFoo {
    public:
    //returns size of Foo
    virtual size_t Size() = 0;
    //get single byte from foo
    virtual unsigned char getByte(unsigned long loc) = 0;
};

Это мой код для Foo.h:

#include <boost/dll/alias.hpp>
#include <boost/make_shared.hpp> 
#include "IFoo.h"

namespace someSpace{
class Foo: public IFoo
{
    size_t FooSize;
    unsigned char * someData;
    Foo(std::string someString);
public:
    ~Foo();
    size_t Size();
    unsigned char getByte(unsigned long byteLoc);

    //Factory method
    static boost::shared_ptr<IFoo> create(std::string fooName);
};

BOOST_DLL_ALIAS(
    someSpace::Foo::create, //<-- this function is exported with...
    load_foo                 //<-- this alias
)
}

ИВот код для foo.cpp, если это необходимо:

#include "Foo.h"
namespace someSpace {
     Foo::Foo()std::string fooData)
     {
         strcpy(someData, fooData.c_str());
     }
     size_t Foo::size()
     {
         return FooSize;
     }
     unsigned char Foo::getByte(unsigned long byteLoc)
     {
          return someData[byteLoc % FooSize); 
     }

     static boost::shared_ptr<IFoo> Foo::create(std::string fooName)
     {
          return boost::shared_ptr<IFoo> ( new Foo(fooName) );
     }
}

Я получаю сообщение об ошибке от BOOST_DLL_ALIAS (), которое читает

# define BOOST_DLL_ALIAS (FunctionOrVar, AliasName)в этом объявлении нет класса хранения или спецификатора типа

Почему я получаю это сообщение от boost и как его исправить?

1 Ответ

0 голосов
/ 01 мая 2019

Просто переместите его за пределы пространства имен, похоже, он не работает с деманглингом:

#include <boost/dll/alias.hpp>
#include <boost/make_shared.hpp> 
#include "IFoo.h"

namespace someSpace{
class Foo: public IFoo
{
    size_t FooSize;
    unsigned char * someData;
    Foo(std::string someString);
public:
    ~Foo();
    size_t Size();
    unsigned char getByte(unsigned long byteLoc);

    //Factory method
    static boost::shared_ptr<IFoo> create(std::string fooName);
};
}

BOOST_DLL_ALIAS(
    someSpace::Foo::create, //<-- this function is exported with...
    load_foo                 //<-- this alias
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...