Samstag, 20. Oktober 2018, 15:31 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 514

Wohnort: Wien

1

Mittwoch, 15. August 2018, 11:50

C# debugen einer DLL nicht möglich - The program '[2644] Investox.exe' has exited with code 20000 (0x4e20)

Hallo zusammen,
ich habe wieder angefangen mich mit C#-Indis für Investox zu beschäftigen:
  • ich habe ein Indi erstellt (Berechnung auf Basis von Open-, High-, Low-, Close-Kursen)
  • ich kann die Parameter auslesen und im Code verwenden
  • kann die DLL registrieren
  • Indi wird in Investox erkannt, korrekt berechnet und angezeigt
  • ein Log und gewisse Ergebnisse werden in extene Dateien gespeichert

Ich kann aber meine DLL nicht debugen:
  • ich benutze visual studio 2017
  • .NET Framework 4.7
  • im Code habe ich ein Breakpoint gesetzt
  • bei Debug-Einstellungen des Projekts versuche ich Investox zu starten
  • dabei bekomme ich folgende Fehlermeldung

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
'Investox.exe' (Win32): Loaded 'C:InvestoxInvestox.exe'Module was built without symbols.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64ntdll.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64kernel32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64KernelBase.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64apphelp.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64AcGenral.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64msvcrt.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64sechost.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64rpcrt4.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64sspicli.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64cryptbase.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64bcryptprimitives.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64shlwapi.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64combase.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64ucrtbase.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64gdi32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64gdi32full.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64msvcp_win.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64user32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64win32u.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64ole32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64oleaut32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64shell32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64cfgmgr32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64SHCore.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64windows.storage.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64advapi32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64kernel.appcore.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64profapi.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64powrprof.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64fltLib.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64uxtheme.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64winmm.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64samcli.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64msacm32.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64version.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64userenv.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64dwmapi.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64urlmon.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64winspool.drv'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64mpr.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64winmmbase.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64iertutil.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64propsys.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64IPHLPAPI.DLL'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64bcrypt.dll'Symbols loaded.
'Investox.exe' (Win32): Loaded 'C:WindowsSysWOW64imm32.dll'Symbols loaded.
Exception thrown at 0x00C1831E in Investox.exe0xC0000005Access violation writing location 0x657EAB6E.
Exception thrown at 0x00C18500 in Investox.exe0xC0000005Access violation writing location 0xB4E6507E.
The thread 0xf60 has exited with code 20000 (0x4e20).
The thread 0x3fa8 has exited with code 20000 (0x4e20).
The program '[2644] Investox.exe' has exited with code 20000 (0x4e20).

Ich vermute, dass es was mit Win32 App und WOW64-DLLs zu tun hat. Womöglich handelt es sich um eine einfache Einstellung die ich übersehe. Leider habe ich dazu im Netz nichts gefunden.

Hier noch meine Einstellungen:


Hat jemand vielleicht schon was ähnliches gehabt und gelöst?Danke!
LG
Giuseppe
keep going on...
Inv[7.5.1]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Giuseppe« (15. August 2018, 18:34)


lubesi Männlich

Besucher

Registrierungsdatum: 13. Oktober 2016

Beiträge: 7

2

Dienstag, 21. August 2018, 12:01

Hallo Guiseppe,

aufgrund deiner Anfrage und deines erfolgreichen Einbindens einer dll aus vs2017 habe ich es - nach zahlreichen, erfolglosen Anläufen - erneut versucht. Es ist mir sowohl unter vb.net als auch unter c#.net gelungen. Auch debuggen war einwandfrei möglich (Debug Konfiguration wählen, neu compilieren, neu registrieren). Als Vorlage diente mir Externedotnetindis aus dem Entwicklerpaket (net Variante) und TypicalCSharp.sln aus dem Forum. Die Collections KSEImportExportx habe ich durch die neusten KSEImportExport7 ersetzt und entsprechend referenziert. Deine Projekteinstellungen sind unauffällig und nahezu mit meinen ident (selbe regasm.exe). Ich verzichte jedoch auf die GAC (gacutil), da sie bei Interop Com angeblich nicht verwendet wird - habe ich irgendwo mal gelesen. Außerdem verwende ich net 4.7.2, was meines Erachtens nicht ausschlaggebend ist. Daher meine Fragen an Dich:

- Unter welchem Windows arbeitest du?
- Bist du sicher, dass du die Debug Varianten der dll erfolgreich registriert hast?
- Wird die Typbibliothek .tlb erzeugt?
- Registrierst Du unter Admin Rechten (wird Vs2017 als Admin ausgeführt)?
- Startet Investox.exe sauber, nachdem Du Debug aufgerufen hast?

Ich selbst verwende Win7 (64-bit) und du weißt, dass dort die 32-bit dll's im SysWOW64 Ordner liegen. Ich belasse meine jedoch an Ort und Stelle (so wie Du).

Lg Lubesi

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 514

Wohnort: Wien

3

Mittwoch, 22. August 2018, 08:58

Hello Lubesi,

danke für deine Interesse und deine Erfahrungen. Ich habe auch als Basis für mein Indikator TypicalCSharp.sln aus dem Forum genutzt und auch die Collections KSEImportExportx durch die neusten KSEImportExport7 ersetzt und referenziert. Gacutil nutze ich, da es in ursprünglicher Solution schon der Fall war. Werde noch die Variante ohne testen. Und auch .net 4.7.2 werde ich mal testen.

Grundsätzlich ist es mir jetzt auch möglich zu debugen. So muss ich mal vorgehen:

1) dll neu kompilieren
2) Investox starten
3) Indi in Investox Chart entfernen (fall noch vorhanden)
4) Prozess von investox in VS2017 einbinden (debug -> attach process)
5) Breakpoint setzen
6) Indi in Investox hinzufügen


Wenn die Umsetzung keine Fehler hat, steht Investox stabil und mann kann den Debug-Prozess mehrmals nantereinander starten. Bei einem Fehler in DLL wird bei mir Investox immer geschlossen. Ka ob dieses Verhalten so normal ist.

Hier noch die Antworten zu deinen Fragen:
- Unter welchem Windows arbeitest du?
Win10 Pro mit allen Updates
- Bist du sicher, dass du die Debug Varianten der dll erfolgreich registriert hast?
Nach dem Kompilieren wird mein bin/Debug Ordner mit neuen Versionen der Dateien befüll. Und ich kontrolliere auch ob DLLs eingebunden sind. Somit ja.
- Wird die Typbibliothek .tlb erzeugt?
ja, .tlb wird immer beim Kompilieren neu erstellt. Ich mache mit dieser Datei aktiv nichts weiteres. Wüsste nicht wo ich es hinkopieren müsste. So weit ich weiss, sind dort die Symbole definiert. Diese lade ich beim Start von Investox aus dem Internet (Funktionalität von VS2017)
- Registrierst Du unter Admin Rechten (wird Vs2017 als Admin ausgeführt)?
ja, VS2017 wird immer als Admin ausgeführt.
- Startet Investox.exe sauber, nachdem Du Debug aufgerufen hast?
eben nicht, die Fehlermeldung die ich oben beschrieben habe, kommt nach dem ich Debug gestartet habe.

Bin für jeden Hinweis dankbar :thumbsup:

LG
Giuseppe
keep going on...
Inv[7.5.1]

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Giuseppe« (22. August 2018, 13:10)


lubesi Männlich

Besucher

Registrierungsdatum: 13. Oktober 2016

Beiträge: 7

4

Freitag, 24. August 2018, 15:23

Hallo Giuseppe,

wenn du es geschafft hast, ist ja alles gut. Geht bei Dir die Release Variante? Bei mir heute irgendwie nicht. Ich frage mich gerade, ob sie jemals funktioniert hat?

Lg
Lubesi

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 514

Wohnort: Wien

5

Sonntag, 2. September 2018, 00:35

Hello Lubesi,
die Release Variante habe ich noch nicht ausprobiert, werde es aber machen und lasse dich wissen.
Hast du eine Ahnung wie man folgendes in C# erzielt?
  • Wie berechnet man ein Indikator der als String definiert ist?
  • Wie ruft man ein Indikator der in Investox vordefiniert ist (ohne String Version zu nutzen)?
  • Wie berechnet man ein Indikator der als in einer externen DLL definiert ist?
  • Wie ruft man die Ergebnisse eines Robustheitstests auf?

Fragen über Fragen ... ?(

LG
Giuseppe
keep going on...
Inv[7.5.1]

lubesi Männlich

Besucher

Registrierungsdatum: 13. Oktober 2016

Beiträge: 7

6

Mittwoch, 12. September 2018, 06:51

Hallo Giuseppe,

meine Probleme mit der Release Variante waren wiederum auf eine falsche Registrierung zurückzuführen (jetzt gelöst). Abschließend möchte ich noch dazu sagen, dass man entweder mit Schalter /codebase und absoluten Dateinamen registriert oder eben über gacutil (Speicher) und Bezeichnung. Es ist nicht immer trivial, da Altregistrierungen in der Registry verbleiben und eindeutige und nachvollziehbare Ergebnisse verfälschen können. Meines Erachtens müsste man nicht immer neu registrieren, sofern man nur Code verändert und nicht erweitert, da die Registrierung ja nur den Link zwischen ProgrammID, Funktionsnamen und Dateinamen herstellt - aber damit genug.

Deine Fragen betreff String und Funktion verstehe ich nicht ganz. "4 plus 5" ist it-technisch gesehen ein String. Ob ich zum erwartenden Ergebnis neun gelange, kann man nicht so einfach beantworten. Welche Programmiersprache, welche Implikation, wo findet das System diese Funktion, wie komme ich zum Ergebnis, ...
Für Investox siehe Beispiel Zugriffstest.cls:
Formel = "GD(" & DatenKey & ", " & Perioden & ",S)"
'' Die Formel von der Formelmaschine berechnen lassen:
Fehler = BerechneFormel(Formel, cDaten, Ergebnis)

Abschließend noch ein paar Anmerkungen zur dll-Einbindung. Entgegen Bemerkungen im Forum betreff Geschwindigkeit war ich angenehm überrascht, wie schnell Funktionen in C# beispielsweise berechnet werden. Mein Handelssystem, das eine eigene Implikation von der Funktion Resist (bestehende von PointandFigure abgeleitet und daher für mich zu ungenau) rechnete zuerst in VbScript 15 min und in C# ca.1,5 Minuten (jeweils 16Mio Bars/Ticks). Klarerweise ist Vbscipt ein Interpreter und die dll compiliert, aber dieser Unterschied für ein einfaches Schleifenkonstrukt mit ein paar If then else Bedingungen hat selbst mich überrascht. Anders verhielt es sich beim Speichermanagement. Da ich es nicht geschafft habe ohne copy Anweisung auf die Daten zuzugreifen, ist bei mehrfacher Verwendung des Indikators und 16 Mio Bars unter 32 bit bald mal die 3GB Grenze erreicht. Hat hier jemand andere Erfahrungen/Vorschläge?