myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Daten aus einer DLL in zu einem Hauptprogramm senden?Wie??
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Daten aus einer DLL in zu einem Hauptprogramm senden?Wie??

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Noob6666 Noob6666 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.01.2018
Beiträge: 15


Noob6666 ist offline

Daten aus einer DLL in zu einem Hauptprogramm senden?Wie??

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

HI Leute,

hab im Forum gesucht aber leider nichts gefunden was mein problem beschreiben würde.
Ich bin nicht so oft hier, falls ich iwas übersehen habe, verzeiht es mir bitte, war nicht beabsichtigt.

Mein Problem im kurzen

Mein Projekt:
Habe eine DLL , worüber ich MT5 und VisualStudio verbinden möchte, weil ich in VisualStudio gerne programmieren möchte.

DLL eingebunden im MT5, ist auch ansprechbar und die Funktionen werden auch ausgeführt.
Dazu existiert eine Form-Projekt, welches über den Aufruf aus dem MT5 Skript, über die DLL erstellt wird.Ich starte nicht das Formprojekt dafür! Controls werden in der DLL dann zwischengespeichert die in der Form existieren.
Die GUI ist garnicht wichtig für mich, ich will nur Daten aus dem MT5 in das Form-Projekt übertragen können

Ich kann über Methoden der DLL, Daten aus dem MT5 ziehen wenn ich Sie über eine DLL Methode weitergeben an die DLL. Ich komm nur nicht drauf wie ich Sie an mein Hauptprogramm(Form-Projekt) weitergeben kann.

Ich hab folgendes versucht

C#-Code:
//Hauptprogramm

        public Form1()
        {
            InitializeComponent();
            NameDerDLL.SendeArray += SpeichereText;

        }
        public void SpeichereText(double[,,] daten)
        {
            string a = "";
            foreach (var item in daten)
            {
                a = a + item + "\n";
            }
            MessageBox.Show(a);
        }

In der DLL wurde das ganze so abgelegt

C#-Code:
//DLL
        public static double[,,] HighLows;
        public delegate void übergebeArray(ref double[,,] highLows);
        public static event übergebeArray SendeArray;

        public  void GetData(object sender, EventArgs e)
        {
            string text = "";
            foreach (var item in HighLows)
            {
                text = text + item + "\n";
            };

            SendeArray(ref HighLows);
        }

        public static void SetData(ref double[,,] array)
        {
            HighLows = array;
        }

das hat leider nicht ge klappt, dann hab ich versucht das ganze über eine INvoke Methode zu machen

C#-Code:
//Hauptprogramm

        public delegate void HoleDaten(string text);
        public static event HoleDaten GetData;

        public Form1()
        {
            InitializeComponent();
            NameDerDLL.SendeArray += SpeichereText;
            GetData += SpeichereArray;

        }
        public void SpeichereText(ref double[,,] daten)
        {
            string a = "";
            foreach (var item in daten)
            {
                a = a + item + "\n";
            }
             Invoke(GetData,a);
        }
        void SpeichereArray(string textl)
        {
            MessageBox.Show(textl);
        }

Die Snippets für das Delegate hab ich aus einem alten Projekt übernommen, dass waren aber Klassen und keine DLLs worüber die Delegates angesprochen wurden.

Ich hoffe die Erklärung reicht euch.
Kann mir bitte einer sagen woran es genau liegt und wenn dass der falsche Weg ist, welcher wäre der richtige???

Die Exeption konnt ich abfangen, aber FIleNotExists ist nicht korrekt denn wenn ich die Delegate-Aufrufe raus nehme dann funtz das ganze, kann mir auch nicht erklären warum....

Fehlermeldung:
Contrroller(USDJPY, H1) debugging terminated
Contrroller(USDJPY, H1) System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.IO.FileNotFoundException: Die Datei oder Assembly "MQL_CONN_V1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden.Das System kann die angegebene Datei nicht finden.
Contrroller (USDJPY, H1) bei MQL_C.Form1..ctor()
Contrroller (USDJPY, H1) --- Ende der internen Ausnahmestapelüberwachung ---
Contrroller (USDJPY, H1) bei System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
Contrroller(USDJPY, H1) bei System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
Contrroller(USDJPY, H1) bei System.Activator.CreateInstance(Type type, Boolean nonPublic)
Contrroller(USDJPY, H1) bei System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
Contrroller(USDJPY, H1) bei System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
Contrroller(USDJPY, H1) bei System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
Contrroller(USDJPY, H1) bei System.Reflection.Assembly.CreateInstance(String typeName)
Contrroller(USDJPY, H1) bei MQL_CONN_V1.Controller.FindForm(Assembly assembly, String form_name)
Contrroller(USDJPY, H1) bei MQL_CONN_V1.Controller.GetController(String assembly_path, String form_name)
Contrroller(USDJPY, H1) bei MQL_CONN_V1.Controller.ShowForm(String assembly_path, String form_name)
Contrroller(USDJPY, H1) --- Ende der internen Ausnahmestapelüberwachung ---
Contrroller(USDJPY, H1) bei System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
Contrroller(USDJPY, H1) bei System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
Contrroller(USDJPY, H1) bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
Contrroller(USDJPY, H1) bei Wrapper.Wrapper.Call(MethodInfo method, Int64 owner, Int64 parameters, Int64 result)
03.10.2019 14:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.503
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Benötigt deine Assembly "MQL_CONN_V1" noch andere Assemblies (DLLs)?
Überprüfe evtl. mal mit dem  DependencyWalker.Net die Abhängigkeiten.
03.10.2019 14:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.325
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Fehlermeldung ist doch ziemlich eindeutig:

Zitat von Noob6666:
Fehlermeldung:
System.IO.FileNotFoundException: Die Datei oder Assembly "MQL_CONN_V1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden.

Die Datei muß im Anwendungsverzeichnis liegen oder im Global Assembly Cache liegen.

Ansonsten empfehle ich einen Blick in  [Artikel] C#: Richtlinien für die Namensvergabe und in die Doku bezüglich dem ref-Schlüsselwort.
03.10.2019 16:12 Beiträge des Benutzers | zu Buddylist hinzufügen
Noob6666 Noob6666 ist männlich
myCSharp.de-Mitglied

Dabei seit: 16.01.2018
Beiträge: 15

Themenstarter Thema begonnen von Noob6666

Noob6666 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Th69

die einzigen Verweise die ich drin hab sind aus .Net

C#-Code:
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;

mehr hab ich nicht drin.

Der DepencyWalker hat mir nur die mccorelib mit angezeigt die durch die dlls aber selber nicht eingepflegt werden muss, habs grad probiert um da nochmal Gewissheit zu haben.

@MrSparkle Sie liegt im Anwendungsverzeichnis, wie gesagt sobald ich die delegate aufrufe weg nehme
funktioniert wieder alles ohne Exceptions. probier schon so viel aus wie ich kann/weiß bevor ich mich an foren wende, bin leider am ende mit meinem latein..... bin aber auch kein senior progger
03.10.2019 16:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.325
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Diesen Teil mußt du auch beachten:

Zitat von Noob6666:
Fehlermeldung:
oder eine Abhängigkeit davon wurde nicht gefunden.

Der Hinweis von Th69 bezog sich auf MQL_CONN_V1. Es geht um deren Abhängigkeiten.
03.10.2019 17:34 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 01.04.2020 03:39