DLL in ein Programm einbinden



  • ich muß für eine Schnittstelle eine fremde DLL in mein Programm einbinden. Eigentlich dachte ich, dies wäre kein Problem, aber ich bekomme immer die Fehlermeldung:

    error C3861: "DFCComOpenSerial": Bezeichner wurde nicht gefunden.

    Die DLL und die LIB stehen im Programmverzeichnis und die mitgelieferte Headerdatei wird mit eingebunden.

    Was mache ich falsch?



  • Hast du die benötigten Headerdateien in dein Programm eingebunden?



  • Ja. Die Datei wird geladen. Hier mein kurzes Programm:

    #using "DFComDLL.dll"
    #include "DFComSLink.h"
    #include "stdafx.h"
    #include "Form1.h"

    using namespace test2;

    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    int iComNum;
    char *szComPort;
    int iBaudRate;
    int iTimeOut;
    int iReturn;

    iComNum = 1;
    szComPort = "COM1";
    iBaudRate = 38400;
    iTimeOut = 800;

    iReturn = DFCComOpenSerial(iComNum, *szComPort, iBaudRate, iTimeOut);

    ...

    return 0;
    }

    in der DLL steht angeblich

    extern "C" __declspec(dllexport)
    int __stdcall DFCComOpenSerial(int iChannelNum, char *szComPort,
    int iBaudRate, int iTimeOut);



  • minou schrieb:

    in der DLL steht angeblich

    Wieso angeblich? Wenn du dir nicht sicher bist, guck doch nach (alle "gültigen" Deklarationen solltest du in der "DFComSLink.h" finden)

    PS: Das Programm sieht nicht nach MFC aus - bist du sicher, daß du hier richtig bist?



  • in DFComsLink.h steht auch

    EXTERN_DECL int __stdcall DFCComOpenSerial(int iComNum, char *szComPort, int iBaudRate, int iTimeOut);

    das Programm habe ich in Visual C++ 2005 Express Edition erstellt. Normalerweise arbeite ich mit acucobol, doch für die schnittstelle brauchte ich einen c-compiler (der nichts kostet...).

    bin ich dann hier richtig?



  • Und was für einen Fehler meldet der Compiler überhaupt? (kleiner Tip: in C sieht die main()-Funktion etwas -hmm- anders aus als in einer .NET-Umgebung)



  • die Fehlermeldung steht im 1. Beitrag:

    error C3861: "DFCComOpenSerial": Bezeichner wurde nicht gefunden



  • Hmm, könnte es sein, daß die Funktion in einem Namespace verpackt ist? In dem Fall fehlt noch ein "using namespace DFC;" am Anfang (oder "DFC::" vor dem Namen).

    (PS: Natürlich mußt du statt DFC den richtigen Namen verwenden)



  • Was soll denn

    #using "DFComDLL.dll"
    

    bedeuten? Ist das eine .NET-Assembly? Wenn ja, dann brauchst Du keine h-Datei mehr!
    Falls nein, dann macht es gar keinen Sinn...



  • erst einmal vielen dank, dass ihr mir helfen wollt.

    Nun zu den Tips:

    die Zeile #using "DFComDLL.DLL" ist beim Testen übergeblieben (man versucht schließlich alles...). Ich dachte, wenn er die Funktion nicht erkennt, sage ich ihm noch einmal, welche DLL er nehmen soll.

    Mit namespace komme ich leider auch nicht weiter.

    Gibt es eigentlich eine kleine einfache DLL mit der ich das Vorgehen testen kann? Vielleicht liegt der Fehler garnicht bei mir sondern bei der DLL. Denn das Einbinden funktioniert auch nicht in acucobol, obwohl es da ja auch so einfach sein soll...


Anmelden zum Antworten