Windows32-DLL mit C++ erstellen

Hallo Experten,

mit Visual Studio 2008 muss ich eine Windows32-DLL erstellen, um einige Methoden z.B. von VBA aus via declare-Funktion ( siehe http://msdn.microsoft.com/de-de/library/4zey12w5.aspx ) aufrufen zu können.

Wie man eine Windows32-DLL in Visual-Studio erstellen kann, weiß ich schon. Was ich nicht hinbekomme, ist ein Export einer Methode (Function / Sub / Property).

Gibt es jemanden, der mir hier anhand eines kleinen Beispiels erläutern kann, wie man erfolgreich eine Methode extern verfügbar machen kann?

Vielen Dank im voraus.

Ich muß gestehen, daß ich meine Win32-DLLs alle mit Visual Studio 6 erstellt habe, aber ich gehe davon aus, daß es in VS2008 noch genauso funktionieren müßte.

Wichtig für den Export einzelner Funktionen ist eine „.def“ - Datei, die mit im Projekt eingebunden werden muß. In dieser Datei kann man festlegen, welche der Funktionen exportiert werden sollen. Diese Datei könnte z.B. folgendermaßen aussehen (hier die heißt „ValidationStandard.def“):

LIBRARY ValidationStandard
DESCRIPTION „ValidationStandard.DLL, gemeinsam genutzte Validierungs-Routinen“

EXPORTS

InitModule @1
ExitModule @2
CheckIfIsInitialized @3

Damit erkläre ich dem Linker, daß meine drei Funktionen InitModule, ExitModule und CheckIfIsInitialized exportiert werden sollen.

Wichtig ist auch, daß die zu exportierenden Funktionen eigenständige Funktionen sind, und nicht Member einer Klasse. Klassenmember von außen zugänglich zu machen ist haarig, das geht wohl irgendwie auch, das ist aber dermaßen kompliziert, daß ich es immer vermieden habe.

Grüße

Alex Müller

Hallo BigBen,
mit VBA kenne ich mich nicht so aus. Aber um eine DLL zu erstellen, die in einem anderen C++ Projekt verwendet werden kann, ist folgendes zu tun:

  1. Das Projekt „myDLL“ als DLL anlegen (kannst du ja schon).
  2. Wenn du Klassen oder globale Funktionen exportieren möchtest, sieht das wie folgt aus:
    in myfunction.h (eine Datei des Projektes)

__declspec( dllexport ) double quad(double x){return x*x;}; // Funktion ohne Klassenzugehörigkeit

class __declspec( dllexport ) CMyFunction
{
public:
CMyFunction(void);
int eval(); // Funktion wird später gerufen

}

in myfunction.cpp
int CMyFunction::eval(){
… Berechnungen …
return 42; // irgendeine Rückgabe
}

Das Projekt erstellen. Dabei wird u.a. myDLL.dll und myDLL.lib erzeugt.
In dem weiteren Projekt useDLL, das die myDLL.dll verwenden soll, trägst du
die myDLL.lib bei den Projekteinstellungen/Linker/Eingabe/Zusätzliche Abhängigkeit ein.

Die cpp Datei in useDLL könnte so aussehen:
#include
#include „MyFunction.h“
using namespace std;

void main(){
CMyFunction f;
cout

tut mir leid - hab den Thread leider übersehen…