Funktion in DLL exportieren und in Anwendung benutzen.



  • Hallo,

    ich versuche eine Funktion in einer DLL zu packen, kurtz gefasste so:

    // MxLib.cpp : Definiert die Initialisierungsroutinen für die DLL.
    //
    
    #include "stdafx.h"
    #include "MxLib.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    //
    //	Hinweis:
    //
    //		Wird diese DLL dynamisch an die MFC-DLLs gebunden,
    //		muss bei allen von dieser DLL exportierten Funktionen,
    //		die MFC-Aufrufe durchführen, das Makro AFX_MANAGE_STATE
    //		direkt am Beginn der Funktion eingefügt sein.
    //
    //		Beispiel:
    //
    //		extern "C" BOOL PASCAL EXPORT ExportedFunction()
    //		{
    //			AFX_MANAGE_STATE(AfxGetStaticModuleState());
    //		// Hier normaler Funktionsrumpf
    //		}
    //
    //		Es ist sehr wichtig, dass dieses Makro in jeder Funktion
    //		vor allen MFC-Aufrufen angezeigt wird. Dies bedeutet, dass es
    //		als erste Anweisung innerhalb der Funktion ausgeführt werden
    //		muss, sogar vor jeglichen Deklarationen von Objektvariablen,
    //		da ihre Konstruktoren Aufrufe in die MFC-DLL generieren
    //		könnten.
    //
    //		Siehe MFC Technical Notes 33 und 58 für weitere
    //		Details.
    //
    
    // CMxLibApp
    
    BEGIN_MESSAGE_MAP(CMxLibApp, CWinApp)
    END_MESSAGE_MAP()
    
    // CMxLibApp-Erstellung
    
    CMxLibApp::CMxLibApp()
    {
    	// TODO: Hier Code zur Konstruktion einfügen
    	// Alle wichtigen Initialisierungen in InitInstance positionieren
    }
    
    // Das einzige CMxLibApp-Objekt
    
    CMxLibApp theApp;
    
    // CMxLibApp Initialisierung
    
    BOOL CMxLibApp::InitInstance()
    {
    	CWinApp::InitInstance();
    
    	return TRUE;
    }
    
    void Test(void){
    	printf("Test");
    }
    
    extern "C" __declspec(dllexport) void Test(void);
    

    Allerdings funktioniert das nicht, und ich habe keine Ahnung warum.
    Außerdem wüsste ich gerne, wie man die Funktion anschließend wieder in der
    Anwendung verwendet/aufruft.
    Ich verwende Visual c++ 2003 .NET Standart



  • Na die Info die du uns gibst ist ein bisschen wenig!!

    Wichtig wäre z.B. ob du ein Dll Project verwendest.

    Na ja, der Ansatz ist prizipiell nicht schlecht, nur das die Definierung

    extern "C" __declspec(dllexport) void Test(void);
    

    in ein Header file muss, das du dann in deine Applikation einbindest.
    Dessen aber zu viel 😮, drum schau mal hier rein:

    http://www.resourcecode.de/view.php?id=776

    danach hier rein:

    http://www.supportnet.de/discussion/listmessages.asp?autoid=137442

    und dann hier rein:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_link_implicitly.asp

    und dann solltest du das mit der Dll abgehakt haben 😉

    codeman



  • Danke, das mit der DLL klappt.
    Allerdings wieß ich nicht wo man in Visual Studio 2003. NET die .lib einbinden kann.



  • Aha, jetzt klappts. Muss man in der Linker-Befehlszeile machen.

    [Thread finished]
    Ist ja eigentlich vieleicht auch was für die FAQ???


Anmelden zum Antworten