.exe in .dll umwandeln

Thurstan

Mitglied
Hallo Leute ich arbeite mit VisualStudio 2005 V. 8 in C++

Habe jetzt das Problem, dass ich einen Teil aus einer .exe gerne in einer .dll hätte - was gibt es da zu beachten ? wie geht man am besten vor ?
 

BOND_WR

Mitglied
Hallo,

ich kenne es so, dass du in deinem Workspace ein neues Projekt anlegen musst (darauf achten das du ein DLL - Projekt anlegst) und dann, mit den ensprechenden includes, aus deinem aktiven Projekt auf Funktionen in der DLL zugreifen kannst.
 

AdmiralX

Grünschnabel
ja erstell dir ein dll project, mit zwei dateien meinedll.h und meinedll.c(pp)

kopiere die benötigten funktionen in die c-datei und die header für die funktionen die du nach außen sichtbar machen möchtest in die h-datei.
du brauchst für die deklarationen noch ein paar makros, ich verwende immer diese hier:

C:
// für einfache c-funktions namen
#ifdef __cplusplus
extern "C" { 
#endif

/** DLL export/import definitions */
// falls der header auch in dem aufrufenden programm verwendet wird 
#ifdef MEINEDLL_EXPORTS
	#define MEINEDLL_API __declspec(dllexport)
#else
	#define MEINEDLL_API __declspec(dllimport)
#endif

#define LIB_CALL WINAPI

// so würde dann die funktionsdeklaration aussehen
MEINEDLL_API int LIB_CALL meineFunktion(long lParam);

#ifdef __cplusplus
}
#endif
 

Thurstan

Mitglied
erst einmal Danke für eure Hilfe!
Mir ist das jetzt auch alles etwas klarer geworden - wenn ich aber ein DLL-Projekt anlege, bietet mir VS ja schon ein paar Angaben an:

in der test.h
Code:
// test.h : Hauptheaderdatei für die test-DLL
#pragma once
#ifndef __AFXWIN_H__
	#error "'stdafx.h' vor dieser Datei für PCH einschließen"
#endif
#include "resource.h"		// Hauptsymbole
// CtestApp
// Siehe test.cpp für die Implementierung dieser Klasse

class CtestApp : public CWinApp {
public:
	CtestApp();

// Überschreibungen
public:
	virtual BOOL InitInstance();

	DECLARE_MESSAGE_MAP()
};


in der test.cpp
Code:
// test.cpp : Definiert die Initialisierungsroutinen für die DLL.
#include "stdafx.h"
#include "test.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//TODO: Wenn diese DLL dynamisch mit MFC-DLLs verknüpft ist,
//	     muss für alle aus dieser DLL exportierten Funktionen, die in
//	     MFC aufgerufen werden, das AFX_MANAGE_STATE-Makro
//	     am Anfang der Funktion hinzugefügt werden.

// CtestApp
BEGIN_MESSAGE_MAP(CtestApp, CWinApp)
END_MESSAGE_MAP()


// CtestApp-Erstellung
CtestApp::CtestApp() {
	// TODO: Hier Code zur Konstruktion einfügen.
	// Alle wichtigen Initialisierungen in InitInstance positionieren.
}

// Das einzige CtestApp-Objekt
CtestApp theApp;

// CtestApp-Initialisierung
BOOL CtestApp::InitInstance() {
	CWinApp::InitInstance();
	return TRUE;
}

und genau jetzt weiß ich nicht 100 % weiter:
in welchen Block müssen jetzt die Funktionen in der .cpp?
und in welchen Block müssen die Deklarationen /Prototypen in der .h?
 

Neue Beiträge