Autor Beitrag
doubleII
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Sa 25.06.16 19:02 
Hallo zusammen, Ich habe folgendes Problem:

Ich habe eine C# Application und ein C++ Projekt. MS Visual .net 2015.
Wie rufe ich jetzt von C# eine C++ Funktionen auf.
Suche schon einige Zeit und hab leider noch kein passendes Bsp gefunden.
Wo könnte man mehr Info findet?
Ich habe eine Toolbox und der Code für sie ist auf C++ geschrieben, wie man oben als Beispiel eine Funktion sehen kann. Dll Datei habe ich zur Verfügung.
Ich wäre sehr dankbar , wenn mir jemand ein bisschen mehr erklären kann.
Vielen Dank!
Hier ist eine Funktion von dem C++ Code:
C ++ Funktion
ausblenden Quelltext
1:
2:
3:
4:
5:
int Toolbox::Initialize(LPCSTR systemPath, LPCSTR license, DLL_LogFunc* logFunc)
{
   if (m_initialize) return m_initialize((char*)systemPath,(char*)license,logFunc);
   return -1;
}


C Sharp
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
using System.Runtime.InteropServices;

namespace Project_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        [DllImport("Toolbox.dll")]
        public static extern int Initialize( ????? ); // Funktion keine Methode. Was muss ich zwischen Klammern schreiben???
        private void btnExecute_Click(object sender, EventArgs e)
        {
              initialize( ???? );
        }
    }


Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Sa 25.06.2016 um 19:11
Moderiert von user profile iconTh69: Titel geändert ("C#" statt "C Scharp")
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.06.16 19:26 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 25.06.16 19:48 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
dazu müsstest du im C# Projekt einen Verweis hinzufügen (zu finden im Projektmappen Explorer). Anschließend muss nur noch nach der Dll gesucht werden.
Den Verweis-Namen trägst du noch als using VerweisName im Projekt ein, und schon solltest du die Klasse mit ihren Funktionen aufrufen können.
Das geht nur bei .NET-Assemblies. Da er DLLImport benutzt, dürfte er die Funktionen einer Win32-DLL nutzen wollen und sucht nun nach den korrekten Parametern für die .NET-seitige Methode.

Hier gibt es einen Aritkel dazu, der auch eine Liste mit Win32 <> .NET Entsprechungen enthält: www.codeproject.com/...714/Win-API-C-to-NET

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.06.16 22:18 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 26.06.16 09:26 
Hallo doubleII und :welcome:

DLLImport funktioniert, so wie Christian schon verlinkt hat, am einfachsten für eine C-Schnittstelle.
Bei C++ besteht zum einen die Schwierigkeit bzgl. des Name mangling, aber die Hauptproblematik besteht in der unterschiedlichen Speicherverwaltung bei C# und C++ (d.h. wenn du C++ Klassen wie z.B. DLL_LogFunc einbinden willst, dann mußt du das Speicherlayout exakt 1:1 in C# nachbauen - dies nennt man Marshalling).
Ich würde dir daher davon abraten, direkt eine C++ DLL in C# einzubinden (zu versuchen).

Erstelle dir eine Wrapper-DLL mit einer reinen C-Schnittstelle, d.h. nur globale Funktionen und native Datentypen!

Edit:
Und bitte Crossposts immer angeben: myCSharp.de - Unmanaged Dll C++ die Funktionen in C Sharp einbinden

PS:
@Frühlingsrolle: Trotzdem kommt es auch bei VS auf den Projekttyp an (es gibt natives C++ und C++/CLI - und nur letzteres erzeugt .NET Assemblies)


Zuletzt bearbeitet von Th69 am Di 28.06.16 09:44, insgesamt 1-mal bearbeitet
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mo 27.06.16 17:10 
ich habe hier weiter geschrieben:
www.mycsharp.de/wbb2...=3790291#post3790291
Zitat:
Und bitte Crossposts immer angeben: myCSharp.de - Unmanaged Dll C++ die Funktionen in C Sharp einbinden

Sorry Th69, mache ich :).

Wäre mich frohen, wenn jemand etwas Vorschlagen kann.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 27.06.16 17:15 
Hast Du hier mal geschaut?
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Hier gibt es einen Aritkel dazu, der auch eine Liste mit Win32 <> .NET Entsprechungen enthält: www.codeproject.com/...714/Win-API-C-to-NET

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 28.06.16 10:20 
Hallo doubleII,

wie du siehst sind Crossposts für uns Helfer nur schwer nachzuverfolgen, aber ich habe dir in dem anderen Beitrag geantwortet.