Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » DLL Einbindung mit c++.NET

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
18.08.2005, 11:49 Uhr
CRocker



Hallo,

weiß jemand wie ich unter Visual Studio.NET eine c++ DLL in meinem c++ Hauptprogramm
einbinde???
Es ist ja so, dass Microsoft seine dot Net-Entwicklung ja mit so vielen Erleichterungen angepriesen hat. Nun kann man ja im Solutionexplorer eine neue Referenz hinzufügen.
Diese bindet ja dann automatisch eine neue DLL mit ein.
Funktioniert bis dahin auch alles super.
Wie lautet denn dann die Syntax um Funktionen aus der DLL aufzurufen?
Scheint unter .NET irgendwie anders zu funktionieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.08.2005, 12:01 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja machst du ein normales C++ Programm? Dann ist das genauso wie vorher, wenn du ein Managed C++ benutzt (also mit .NET-Framework, ists anders, genauso wenn du ein C#-Programm machst)

Beim ersten kommts eben drauf an ob du die DLL manuell laden willst oder ob du sie statisch anbinden (an-!) willst.

manuell laden geht so:


C++:

int (__cdecl*) funcptr(int param);

// ...

HINSTANCE hDll = LoadLibrary("my.dll");

funcptr ptr = GetProcAddress(hDll, "MyFunc");

if(ptr)
  ptr(4);

FreeLibrary(hDll);



das dynamisch anbinden ginge so:


C++:
int __declspec(dllimport) MyFunc(int param);

#pragma comment(lib, "my.lib")

// ...

MyFunc(4);


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.08.2005, 12:39 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von FloSoft:
[/cpp]
das dynamisch anbinden ginge so:

C++:
int __declspec(dllimport) MyFunc(int param);



wobei ich da immer die dazugehörige Header Datei benutzten würde, wenn es eine fremd dll ist, anstatt das selbst zu machen. es muss ja nicht unbedingt __declspec sein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.08.2005, 14:01 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das ist klar, war ja nur ein beispiel
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.08.2005, 15:36 Uhr
CRocker



Habe mir nun eine kleine DLL erstellt, die nur eine Funktion besitzt.
Dann ein neues "Windows Forms Application.NET" Projekt erzeugt, indem eine Oberfläche nur mit einem Button für den Funktionsaufruf vorhanden ist.
Dann habe ich mit "Reference hinzufügen" im "Solutionexplorer" die andere DLL geladen.
Die Funktion kann ich mir dann im neuen Projekt ansehen.
(Muß wohl irgendie LoadLibrary und so ersetzen)

Sie wird auch beim Funktionsaufruf vorgegeben.
Beispiel:

private: System::Void Function_Click(System::Object * sender, System::EventArgs * e)
{
dll_function::FUNCTION(); //dll_ function ist die implementierte DLL
}

Bekomme aber dann folgende Medlung vom Kompiler:

d...\TEST.h(81): error C3257: 'dll_function::FUNCTION::FUNCTION' : cannot create a temporary object of a managed type.

Die MSDN hilfe sagt mir:
....This temporary object is created on the stack because there is no call to new.


Aber wie???
Mit "int __declspec(dllimport) FUNCTION();" habe ich auch Ergebnisse.
Und die Funktion kennt er ja auch nun.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.08.2005, 10:46 Uhr
CRocker



Ich habe es geschafft

So klappt es auch mit VB-DLLs.
DLL einbinden, Funktion aufrufen und sogar noch Daten via array zurückbekommen.


C++:

    using namespace <DLL-Name>;

    Array *a;
    <Funktionsname>* SHOW = new <Funktionsname>();
    a=SHOW-> <Arrayname in VB> (0);



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: