Hallo deepthroat,
danke für Deine schnelle Erlärung meiner Fehler.
Leider klappt's noch immer nicht.
Als erstes hier mein aktueller Code; darin nutze ich nun DLLIMPORT, wie von Dir empfohlen.
..\projects\DLL_test\dll.h:
..\projects\DLL_test\dllmain.c:
Für dll_test (DLL-Funktionen) habe ich in wxDevC++ folgendes unter "Project Options" eingestellt:
Additional Command-line options: Preprocessor Definitions: BUILDING_DLL=1
Standardmäßig ist dort "Directories" eingestellt: C:\...\projects\DLL_test\Output\MingW
Compilieren und Build der DLL-Datein erfolgen ohne Fehler, mit folgenden Ausgabedateien:
DLL_test.dll, dllmain.o und libDLL_test.a
Die DLL-Funktion add2num() möchte ich nun in main.c aufrufen.
Dazu habe ich für main.c in wxDevC++ folgendes unter "Project Options" eingestellt:
Additional Command-line options: Preprocessor Definitions: BUILDING_DLL=0
Als Library Directories habe ich: C:\Program Files\Dev-Cpp\projects\DLL_test\Output\MingW
Unter "Project Options" kann ich bei Additional Command-line options: Linker: Add Library or Object kein DLL_test.lib eingeben, da es beim REBUILD ALL der DLL-Dateien nicht erzeugt worden ist.
Was mache ich da noch falsch?
..\procjects\DLL_Aufruf\main.c:
Ich freue mich auf Eure weiter Hilfe; langsam verstehe ich die Zusammenhänge der DLL-Programmierung in C; jedoch leider bei weitem noch nicht alles ...
Schöne Grüße,
BeFu
danke für Deine schnelle Erlärung meiner Fehler.
Leider klappt's noch immer nicht.
Als erstes hier mein aktueller Code; darin nutze ich nun DLLIMPORT, wie von Dir empfohlen.
..\projects\DLL_test\dll.h:
C:
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void HelloWorld (void);
/* Deklaration der DLL-Funktion add2num() :*/
DLLIMPORT __stdcall double add2num(double a, double b);
#endif /* _DLL_H_ */
..\projects\DLL_test\dllmain.c:
C:
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DLLIMPORT void HelloWorld () /* Standardmäßig von wxDev-C++ angelegt */
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
/*----- eigene DLL - Funktion aus CPPDLL-Tutorial von VitalDragon ---*/
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
/* Hier die Definition der DLL-Funktion add2num() */
DLLIMPORT __stdcall double add2num(double a, double b)
{
return a+b;
}
Für dll_test (DLL-Funktionen) habe ich in wxDevC++ folgendes unter "Project Options" eingestellt:
Additional Command-line options: Preprocessor Definitions: BUILDING_DLL=1
Standardmäßig ist dort "Directories" eingestellt: C:\...\projects\DLL_test\Output\MingW
Compilieren und Build der DLL-Datein erfolgen ohne Fehler, mit folgenden Ausgabedateien:
DLL_test.dll, dllmain.o und libDLL_test.a
Die DLL-Funktion add2num() möchte ich nun in main.c aufrufen.
Dazu habe ich für main.c in wxDevC++ folgendes unter "Project Options" eingestellt:
Additional Command-line options: Preprocessor Definitions: BUILDING_DLL=0
Als Library Directories habe ich: C:\Program Files\Dev-Cpp\projects\DLL_test\Output\MingW
Unter "Project Options" kann ich bei Additional Command-line options: Linker: Add Library or Object kein DLL_test.lib eingeben, da es beim REBUILD ALL der DLL-Dateien nicht erzeugt worden ist.
Was mache ich da noch falsch?
..\procjects\DLL_Aufruf\main.c:
C:
#include <stdio.h>
#include <stdlib.h>
#include "..\DLL_test\dll.h" /* Damit müsste in main.c doch die DLL-Funktion */
/* double add2num(double a, double b) bekannt sein? */
int main(int argc, char *argv[])
{
double num1, num2, erg;
num1= num2= erg= 0,0;
printf("Bitte zwei Zahlen eingeben; diese werden addiert\n");
printf("Bitte Zahl1 eingeben: ");
scanf("%lf", &num1);
printf("Bitte Zahl2 eingeben:");
scanf(" %lf", &num2);
/* Die DLL-funktion add2num() ist in main.c noch immer nicht bekannt :-( */
erg= add2num(num1, num2);
printf(" %lf + %lf= %lf\n\n", num1, num2, erg);
system("PAUSE");
return 0;
}
Ich freue mich auf Eure weiter Hilfe; langsam verstehe ich die Zusammenhänge der DLL-Programmierung in C; jedoch leider bei weitem noch nicht alles ...
Schöne Grüße,
BeFu