Dll Fehler



  • Hoi, ich will grad kurz ne kleine Dll schreiben und kriege da dauernd nicht aufgelöste externe, obwohl das eigentlich nicht sein sollte, ein kleines minimal snippet:

    main.h:

    #ifdef MAIN_EXPORTS
    #define MAIN_API __declspec(dllexport) 
    #else
    #define MAIN_API __declspec(dllimport) 
    #endif
    #include <iostream>
    
    namespace CurlDll
    {
    
        class CallHost
        {
        public: 
            static MAIN_API std::string callUrl(std::string pUrl, std::string pProxy); 
    		static MAIN_API void Try(); 
        };
    }
    

    main.cpp

    #include "main.h"
    #include <Windows.h>
    #include <curl/curl.h>
    
    namespace CurlDll
    {
    	std::string CallHost::callUrl(std::string pUrl, std::string pProxy)
        {
    		CURL *curl;
    		CURLcode res;
    		curl = curl_easy_init();
    		if(curl) 
    		{
    			curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
    
    			curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    
    			res = curl_easy_perform(curl);
    
    			if(res != CURLE_OK)
    				fprintf(stderr, "curl_easy_perform() failed: %s\n",
    						curl_easy_strerror(res));
    
    			curl_easy_cleanup(curl);
    		}
            return "test";
        }
    	void CallHost::Try()
        {
    		MessageBox(0,"lololowwwwwwwwwwwl", "wqgqwwwwwgq", MB_OK |MB_ICONINFORMATION);
        }
    }
    

    Spätestens beim curl Kram rastet der compiler komplett aus und wirft 52 unaufgelöste externe, aber wenn man den Curl Kram weglässt und nur die Try Methode anwendet kommt auch:
    Fehler 4 error LNK1120: 1 nicht aufgelöste Externe
    Fehler 3 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__MessageBoxA@16".

    Sry aber ich steh grad etwas aufm Schlauch, ist auch ehrlich gesagt das erste mal, dass ich eine Dll mache, die einfach nur ein paar Funktionen bereitstellen soll.



  • Du musst dem Linker sagen dass er gegen die "User32.lib" linken soll.



  • Ah war wohl ein Problem mit der einen Solution, in der neuen gings, user32 sollte ja auch standardmäßig drin sein^^

    Aber hast du vil. noch ne Idee warum der Libcurl Kram auch linker error´s throwt? Die verlinkung in eingabe und include ist definitiv richtig und funktioniert in nem executable Projekt wunderbar. Ist auch static gelinkt 😮



  • Schön, dass du die Namen der fehlenden Funktionen verschweigst! Da können wir endlich mal wieder raten.

    Binde die fehlende Bibliothek dazu. 32 und 64 Bit lassen sich nicht mischen!



  • Sry^^

    Projekt ist 32 bit, die Lib´s auch, wie gesagt, funktioniert mit den gleichen includes und links in nem anderen executable Projekt ganz wunderbar.

    mein Code atm:

    main.h

    #ifdef MAIN_EXPORTS 
    #define MAIN_API __declspec(dllexport) 
    #else 
    #define MAIN_API __declspec(dllimport) 
    #endif 
    #include <iostream> 
    
    namespace CurlDll 
    { 
    
        class CallHost 
        { 
        public: 
            static MAIN_API void Try(); 
        }; 
    }
    
    #include "main.h" 
    #include <Windows.h> 
    #include <curlpp/cURLpp.hpp>
    #include <curlpp/Easy.hpp>
    #include <curlpp/Info.hpp>
    #include <curlpp/Options.hpp>  
      #include <curlpp/Exception.hpp>
    
    namespace CurlDll 
    { 
    
        void CallHost::Try() 
        { 
    		curlpp::Easy request;
    		request.setOpt(new curlpp::options::UserAgent("Mozilla/4.0"));
    		request.setOpt(new curlpp::options::AutoReferer(true));
    		request.setOpt(new curlpp::options::FollowLocation(true));
    		request.setOpt(new curlpp::options::Url("http://xml.utrace.de"));
    		request.perform();
            MessageBox(0,"lololowwwwwwwwwwwl", "wqgqwwwwwgq", MB_OK |MB_ICONINFORMATION); 
        } 
    }	
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason)
    {return 1;}
    

    Ich kriege 47 Fehler mit 26 nicht aufgelösten externen (ohne den Curl Kram klappts jetzt also liegt definitiv daran)

    Fehler 2 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAStartup@8".

    Fehler 11 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0".

    Fehler 33 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__setsockopt@20".

    usw. und so fort, brauch ich jetzt glaub ich nicht alle rauskopieren^^



  • Und hast du mal versucht herauszufinden, was das für Funktionen sind?



  • Alle funktionen der libcurl library 😮

    Wie gesagt, wenn ich ne statische Library oder ne .exe compile gehts wunderbar, also muss es offenbar daran liegen, dass man bei einer dll noch etwas extra machen muss o.ä. ?



  • Etix schrieb:

    Alle funktionen der libcurl library 😮

    Nein, keine der drei.



  • Tipp: WSA steht für "Windows Sockets API"



  • Etix schrieb:

    Wie gesagt, wenn ich ne statische Library oder ne .exe compile gehts wunderbar, also muss es offenbar daran liegen, dass man bei einer dll noch etwas extra machen muss o.ä. ?

    Naja in eine Anwendung werden wohl standardmäßig ein paar mehr libs gelinkt. Normal brauchst du aber "Ws2_32.lib" auch noch.


Log in to reply