Retour de Chaînes à partir des Fonctions de la DLL

Pour une raison quelconque, de retourner une chaîne de caractères à partir d'une fonction de DLL se bloque mon programme sur l'exécution avec l'erreur Unhandled exception at 0x775dfbae in Cranberry Library Tester.exe: Microsoft C++ exception: std::out_of_range at memory location 0x001ef604...

J'ai vérifié ce n'est pas un problème avec la fonction elle-même en compilant le code de la DLL comme un .exe et de faire quelques tests simples dans la main fonction.

Fonctions avec d'autres types de retour (int, double, etc.) le travail parfaitement.

  • Pourquoi cela se produit?
  • Est-il un moyen de contourner ce problème?

Code Source de la DLL:

//Library.h
#include <string>

std::string GetGreeting();

.

//Library.cpp
#include "Library.h"

std::string GetGreeting()
{
    return "Hello, world!";
}

Code Source pour testeur:

//Tester.cpp
#include <iostream>
#include <Library.h>

int main()
{
    std::cout << GetGreeting()
}

EDIT: je suis en utilisant VS2010.


Conclusion

Une solution de contournement est de s'assurer que la bibliothèque et la source sont compilés à l'aide de la même compilateur avec le mêmes options, etc.

Est-il de code que vous pouvez nous montrer? Ou le code est-il pas le vôtre?
Mis à jour avec des exemples de code.
Cette compile pour moi dans Visual studio 2008. Quel compilateur que vous utilisez?
Si je comprends bien, si la DLL et EXE sont compilés avec le même compilateur(servicepack et les niveaux de correction) et même des versions de bibliothèques et exactement les mêmes options de compilation, il est possible pour les DLL et EXE pour partager un tas si cela peut fonctionner, toute autre combinaison peut vous donner des problèmes, comme vous le rencontrez
bdk est un excellent point sur les Crt découvrez: msdn.microsoft.com/en-US/library/ms235460(v=VS.80).aspx Bien que cela ne devrait pas être un problème si vous êtes en immeuble deux projets, avec la même version de VS2010 avec la même CRT.

OriginalL'auteur Maxpm | 2010-12-15