Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » DLL im Dienst

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.06.2010, 07:51 Uhr
~FreiherrEintritt_
Gast


Ich habe eine Projektmappe (Visual Studio 2008) mit mehreren Projekten. Alles Win32-Konsolenanwendungen, einige sind DLLs, andere normale exe-Dateien und eines ist ein Dienst.

Die DLLs exportieren Klassen, die ich so in den Headern deklariere:

C++:
class DLLclass {
    static __declspec(dllexport) void method();
    ...
};



Wenn ich diese Klassen in den anderen Projekten nutzen will, erstelle ich einfach einen Verweis auf das DLL-Projekt und passe die Include-Pfade an (ich benutze also die gleichen Header in den DLL-Projekten und den Projekten, die die DLL-Klassen benutzen).

Das funktioniert für anderen DLL-Projekte und die Konsolenanwendungen, nicht aber für den Dienst.

Beim Kompilieren sagt er mir:

Code:
error C3389: __declspec(dllexport) kann bei /clr:pure oder /clr:safe nicht verwendet werden.
1>c:\...\Header.h(12) : error C3395: "DLLclass::method": __declspec(dllexport) kann nicht mit der __clrcall-Aufrufkonvention auf eine Funktion angewendet werden.



So wie ich das sehe, betrifft das die Compiler-Option "CLR-Bildtyp" im Projekt-Menü des Dienstes. Aber wenn ich daran rumspiele, ändert das nichts an der Fehlermeldung.

Wie kann ich diese DLL-Klassen in den Dienst einbinden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.06.2010, 10:43 Uhr
0xdeadbeef
Gott
(Operator)


Zunächst mal musst du auf der einbindenden Seite

C++:
__declspec(dllimport)


benutzen (das macht man idR mit einem Makro). CLR bedeutet .net, und dass du aus einem .net-Assembly nicht auf diese Art exportieren kannst, ist eigentlich logisch.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.06.2010, 11:42 Uhr
~FreiherrEintritt_
Gast


Danke.

Mein Fehler war: Die Projekt-Vorlage "Dienst" steht in der Rubruk "CLR" und nicht in "Win32"...
Muss ich den Dienst halt manuell bauen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.06.2010, 18:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
du kannst übrigens


C++:
class __declspec(dllexport) DLLclass {
    void method();
    ...
};



schreiben.

besser ist das wohl aber eher so:


C++:
#ifdef MYDLL_EXPORTS
#define mydll_api __declspec(dllexport)
#else
#define mydll_api __declspec(dllimport)
#endif

class mydll_api DLLclass {
    void method();
    ...
};



normalerweise fügt der VS-Compiler automatisch beim generieren eines DLL-Projekts das "MYDLL_EXPORTS"-define in das Projekt ein.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: