Je travaille avec VC9 sous Windows.Exportation de constantes à partir d'une DLL
J'ai une bibliothèque (permet de l'appeler libfoo
) qui est fait des fichiers suivants (« inclure des gardes » et « #include » directives entendue rectifier pour des raisons de clarté):
// foo.hpp
class Foo
{
public:
static const std::string SOME_CONST;
};
Et:
// foo.cpp
#include "foo.hpp"
const std::string Foo::SOME_CONST = "hello";
Foo::SOME_CONST
est exporté en utilisant un fichier .def
.
La bibliothèque compile bien: un fichier libfoo.lib
et un fichier libfoo.dll
sont générés.
J'ai utilisé cette bibliothèque dans un exemple de programme, comme:
// main.cpp
#include <foo.hpp>
int main()
{
std::cout << Foo::SOME_CONST << std::endl; // std::bad_alloc here
return EXIT_SUCCESS;
}
Un std::bad_alloc
est jeté chaque fois que je tente d'utiliser Foo::SOME_CONST
.
Cela se produit uniquement si je liez dynamiquement à libfoo
. Lier statiquement résulte dans un programme fonctionnant parfaitement.
Que pourrait-il se passer ici? Est-il légal d'exporter une std::string
constante de cette façon?
Avec 'dynamiquement' vous voulez dire utiliser GetProcAddress()? –
@ur: Non, je veux dire utiliser libfoo en tant que DLL mais toujours lier un fichier 'libfoo.lib'. – ereOn