2010-10-28 45 views
0

J'ai un nouveau problème avec ma DLL C++ ... J'ai essayé d'exporter la classe entière au lieu d'une seule méthode. Mais le programme ne veut pas compiler maintenant à cause de ce que la portée mondiale n'a pas GetUrl
Voici mon « UrlConnector.h »: Erreur: la portée globale n'a pas GetUrl

 
#define ConnectMe __declspec(dllexport)

namespace ConnectHttps { class ConnectMe { void GetUrl(char *url, unsigned int bufferLength); }; }


et est la partie ici de mon UrlConnector.cpp qui n'est pas compiler:
 
#include "UrlConnector.h" 
#include "MyConnectionClass.h" 
#include 
using namespace std;

namespace ConnectHttps { void ConnectMe::GetUrl(char* url, unsigned bufferLength) { MyConnectionClass initSec; string response = initSec.GetResult(); strncpy_s(url, bufferLength, response.c_str(), response.length()); } }

Maintenant, je voudrais pouvoir créer une DLL à partir de ceci, et je voudrais faire un programme de test pour appeler la classe et la méthode GetUrl d'une DLL. J'utilise Visual Studio 2010 avec Visual C++ DLL. J'ai également réussi à lire this from the MSDN et this tutorial, mais je n'arrive pas à le faire fonctionner! J'apprécierais vraiment toute aide!

Répondre

1

À moins que je ne me trompe, vous ne semblez pas donner un nom à votre classe. Vous avez fait ConnectMe pas un nom de classe, mais une macro pour exporter votre classe, mais votre classe doit avoir un nom

Peut-être essayer

#define EXPORT_IT __declspec(dllexport) 

namespace ConnectHttps 
{ 
    class EXPORT_IT ConnectMe 
    { 
     void GetUrl(char *url, unsigned int bufferLength); 
    }; 
} 

Aussi je ne suis pas sûr à 100% parce que je n » t avoir accès à un compilateur pour le moment, mais en tapant:

namespace ConnectHttps { 
    ... 
} 

Dans votre fichier .cpp n'est pas correct. Au lieu de cela, vous devriez avoir:

void ConnectHttps::ConnectMe::GetUrl(char* url, unsigned bufferLength) 
{ 
    MyConnectionClass initSec; 
    string response = initSec.GetResult(); 
    strncpy_s(url, bufferLength, response.c_str(), response.length()); 
} 
+0

Merci de votre réponse rapide ... vous êtes # 1 – dirbacke