000
30.05.2006, 09:47 Uhr
~DiplWI_BA
Gast
|
Hallo,
ich plane ein Projekt, welches aus einem C++/CLI Frontend und einem Ansi-C Backend besteht. Grund: Backend muss eine C-DLL zur Maschinensteuerung implementieren, für die Windows Oberfläche würde ich gerne Windows-Forms verwenden (die MFC habe ich nie so wirklich lieb gewonnen). Dohc ich scheitere schon an der ersten Hürde.
Ich habe eine Klasse für die Datenhaltung in unmanaged C++ erstellt. Diese möchte ich eine DLL packen (auf die dann sowohl die Klasse, welche das Ansi-C Backend kapselt, alsauch die C++/CLI Windows-Forms Anwendung für das Frontend zugriff haben.
Ich habe also die komplette Klasse in Visual Studio 2005 Standard als Win32 Konsolenanwendung geschrieben udn getestet. Die Komplette Klasse befindet sich in einer Header Datei (.h). Dann habe ich eine neue Win32 Konsolenanwendung angelegt und diesesmal als Option "dll" angekreuzt, die Header Datei dort hinein kopiert und in der beim anlegen erstellten cpp Datei includiert. (Die Dateien sehen jetzt so aus
C++: |
//Datenspeicher.h //diverse Klassen die von der exportierten Klasse gneutzt werden //....
class __declspec(dllexport) C_Daten { protected: ....
public: .... }; C_Daten::C_Daten() { this->O_Liste = new C_VerketteteListeLaraObj(); } //diverse weitere implementierungen von Funktionen aus C_Daten //...
|
C++: |
// Datenspeicher.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung. //
#include "stdafx.h" #include "Datenspeicher.h"
/*#ifdef _MANAGED #pragma managed(push, off) #endif */
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } /* #ifdef _MANAGED #pragma managed(pop) #endif */
|
Das ganze kompiliert auch und soweit scheint alles ist in Butter.
Versuche ich aber diese zum test in einer anderen Win32 Konsolenanwendung zu verwenden funktioniert das nicht.
Ich habe die kompilierte lib und die dll in das Verzeichnis meines neuen Win32 Konsolenanwendungsprojektes kopiert und bei Projekteigenschaften->Konfigurationseigenschaften->Linker->Eingabe im Feld "Zusätzliche Abhängigkeiten" den Namen der lib Datei (inkl Endung ".lib") eingegeben. Dann habe ich (wie es in den wenigen Tutorials, die ich zu dem Thema fand geschrieben stand) die Header Datei aus der DLL includiert, als wäre sie Teil des aktuellen Projekts
C++: |
// dll-test.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung. //
#include "stdafx.h" #include "Datenspeicher.h"
/*#ifdef _MANAGED #pragma managed(push, off) #endif */
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } /* #ifdef _MANAGED #pragma managed(pop) #endif */
|
Das Ergebnis ist ein Compilerfehler
Code: |
------ Erstellen gestartet: Projekt: DLL-Test, Konfiguration: Debug Win32 ------ Kompilieren... DLL-Test.cpp c:\daten\visual studio 2005\projects\dll-test\dll-test\dll-test.cpp(5) : fatal error C1083: Datei (Include) kann nicht geöffnet werden: "Datenspeicher.h": No such file or directory Das Buildprotokoll wurde unter "file://c:\Daten\Visual Studio 2005\Projects\DLL-Test\DLL-Test\Debug\BuildLog.htm" gespeichert. DLL-Test - 1 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
|
Was mache ich falsch?
|