[C#] GUI application met Mono/MonoDevelop

Pagina: 1
Acties:

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Ik werk al een aardig tijdje met Mono/MonoDevelop in C# en maak daar tot nu toe alleen maar crossplatform console tooltjes mee.
Nu wil ik echter iets gaan bakken met een GUI, en aangezien er geen standaard winforms project in MonoDevelop zit was m'n eerste keuze op GtkSharp gevallen.

Alles wat ik hiermee bak runt onder Linux prima, geweldig en goed, echter, onder Windows start het niet.
Daar krijg ik een mooie 'Er is een fout opgetreden in GTKTest2 en het programma moet worden afgesloten.'.
In dit geval is GTKTest2 een applicatie met enkel een lege form er in, om te testen of het werkt.

Als ik naar 'Welke gegevens bevat dit rapport' ga, dan zie ik de volgende 'Handtekening van fout':
code:
1
2
3
EventType : clr20r3     P1 : gtktest2.exe     P2 : 1.0.3883.17956     
P3 : 4c6ce428     P4 : gtk-sharp     P5 : 2.12.0.0     P6 : 4bae45b2     
P7 : 3c40     P8 : f     P9 : system.dllnotfoundexception


Als ik vervolgens naar 'Inhoud van foutenrapport' ga dan kom ik daar de volgende tekst tegen:
code:
1
2
3
4
5
6
7
8
9
10
Exception Information
Code: 0xe0434f4d      Flags: 0x00000001
Record: 0x0000000000000000     Address: 0x000000007c812aeb

System Information
Windows NT 5.1 Build: 2600
CPU Vendor Code: 756E6547 - 49656E69 - 6C65746E
CPU Version: 000006FB  CPU Feature Code: 078BF9FF

[..]vanaf hier een lading modules en memory area's[..]


Daar ben ik niet erg veel wijzer van geworden dus ben ik maar eens op zoek gegaan naar een mogelijke oorzaak.

Wat blijkt? Er bestaan GtkSharp runtimes die je blijkbaar nodig hebt om GTK te gebruiken onder Windows.
Aldus heb ik de laatste gtk-sharp-2.12.10.win32.msi vanaf de Novell site (link) getrokken en deze geinstalleerd. De 'Target Gtk# version' in m'n Project Options staat ook op 2.12 dus dat zou moeten werken.

Helaas bleef hierna dezelfde fout terug komen. Mijn volgende stap was dus om de executable aan de Windows Debugging Tools (WinDbg) te voeren en te kijken waar het mis ging:
code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: Z:\GTKTest2.exe
Symbol search path is: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is: 
ModLoad: 00400000 00408000   image00400000
ModLoad: 7c900000 7c9af000   ntdll.dll
ModLoad: 79000000 7904a000   C:\WINDOWS\system32\mscoree.dll
ModLoad: 7c800000 7c8f6000   C:\WINDOWS\system32\KERNEL32.dll
(e70.a38): Break instruction exception - code 80000003 (first chance)
eax=00241eb4 ebx=7ffd9000 ecx=00000000 edx=00000001 esi=00241f48 edi=00241eb4
eip=7c90120e esp=0012fb20 ebp=0012fc94 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:000> g
ModLoad: 77dd0000 77e6b000   C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e70000 77f02000   C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000   C:\WINDOWS\system32\Secur32.dll
ModLoad: 603b0000 60416000   C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll
ModLoad: 77f60000 77fd6000   C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 77f10000 77f59000   C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e410000 7e4a1000   C:\WINDOWS\system32\USER32.dll
ModLoad: 77c10000 77c68000   C:\WINDOWS\system32\msvcrt.dll
ModLoad: 76390000 763ad000   C:\WINDOWS\system32\IMM32.DLL
ModLoad: 10000000 1003e000   c:\progra~1\citrix\system32\mfaphook.dll
ModLoad: 67f50000 67fca000   C:\Program Files\Citrix\system32\CtxSbxHook.DLL
ModLoad: 79e70000 7a400000   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
ModLoad: 78130000 781cb000   C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4027_x-ww_e69378d0\MSVCR80.dll
ModLoad: 7c9c0000 7d1d7000   C:\WINDOWS\system32\shell32.dll
ModLoad: 773d0000 774d3000   C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
ModLoad: 5d090000 5d12a000   C:\WINDOWS\system32\comctl32.dll
ModLoad: 790c0000 79bb7000   C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll
ModLoad: 774e0000 7761d000   C:\WINDOWS\system32\ole32.dll
ModLoad: 79060000 790bb000   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
ModLoad: 68000000 68036000   C:\WINDOWS\system32\rsaenh.dll
ModLoad: 64880000 6489a000   C:\Program Files\GtkSharp\2.12\bin\glibsharpglue-2.dll
ModLoad: 685c0000 686b0000   C:\Program Files\GtkSharp\2.12\bin\libglib-2.0-0.dll
ModLoad: 71ab0000 71ac7000   C:\WINDOWS\system32\WS2_32.DLL
ModLoad: 71aa0000 71aa8000   C:\WINDOWS\system32\WS2HELP.dll
ModLoad: 63a40000 63a84000   C:\Program Files\GtkSharp\2.12\bin\libgobject-2.0-0.dll
ModLoad: 65c40000 65c4e000   C:\Program Files\GtkSharp\2.12\bin\libgthread-2.0-0.dll
ModLoad: 5ad70000 5ada8000   C:\WINDOWS\system32\uxtheme.dll
ModLoad: 74720000 7476c000   C:\WINDOWS\system32\MSCTF.dll
ModLoad: 77c00000 77c08000   C:\WINDOWS\system32\version.dll
ModLoad: 755c0000 755ee000   C:\WINDOWS\system32\msctfime.ime
ModLoad: 61780000 61b49000   C:\Program Files\GtkSharp\2.12\bin\libgtk-win32-2.0-0.dll
ModLoad: 65340000 65363000   C:\Program Files\GtkSharp\2.12\bin\libgdk_pixbuf-2.0-0.dll
ModLoad: 6d580000 6d5c7000   C:\Program Files\GtkSharp\2.12\bin\libgio-2.0-0.dll
ModLoad: 6dd00000 6dd0e000   C:\Program Files\GtkSharp\2.12\bin\libgmodule-2.0-0.dll
ModLoad: 6c340000 6c3e9000   C:\Program Files\GtkSharp\2.12\bin\libgdk-win32-2.0-0.dll
ModLoad: 68dc0000 69008000   C:\Program Files\GtkSharp\2.12\bin\libcairo-2.dll
ModLoad: 63c80000 63cad000   C:\Program Files\GtkSharp\2.12\bin\libfontconfig-1.dll
ModLoad: 6a440000 6a4af000   C:\Program Files\GtkSharp\2.12\bin\freetype6.dll
ModLoad: 01290000 012b5000   C:\Program Files\GtkSharp\2.12\bin\libexpat.dll
ModLoad: 65300000 65338000   C:\Program Files\GtkSharp\2.12\bin\libpixman-1-0.dll
ModLoad: 6cc40000 6cc6a000   C:\Program Files\GtkSharp\2.12\bin\libpng13.dll
ModLoad: 012c0000 012d3000   C:\Program Files\GtkSharp\2.12\bin\zlib1.dll
ModLoad: 76380000 76385000   C:\WINDOWS\system32\MSIMG32.DLL
ModLoad: 65580000 655c9000   C:\Program Files\GtkSharp\2.12\bin\libpango-1.0-0.dll
ModLoad: 6d4c0000 6d4cd000   C:\Program Files\GtkSharp\2.12\bin\libpangocairo-1.0-0.dll
ModLoad: 6b280000 6b298000   C:\Program Files\GtkSharp\2.12\bin\libpangowin32-1.0-0.dll
ModLoad: 62940000 62960000   C:\Program Files\GtkSharp\2.12\bin\libatk-1.0-0.dll
(e70.a38): Unknown exception - code c0000139 (first chance)
ModLoad: 60340000 60348000   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\culture.dll
(e70.a38): C++ EH exception - code e06d7363 (first chance)
(e70.a38): CLR exception - code e0434f4d (first chance)
(e70.a38): CLR exception - code e0434f4d (!!! second chance !!!)
eax=0012f2d0 ebx=e0434f4d ecx=00000000 edx=00000028 esi=0012f35c edi=00183580
eip=7c812aeb esp=0012f2cc ebp=0012f320 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
KERNEL32!RaiseException+0x53:
7c812aeb 5e              pop     esi
0:000> g
WARNING: Continuing a non-continuable exception
(e70.a38): Break instruction exception - code 80000003 (first chance)
eax=00000001 ebx=00000000 ecx=00000000 edx=0012f2fc esi=00000000 edi=79eda9ac
eip=7c90120e esp=0012ee5c ebp=0012f308 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:000> g
eax=000000c0 ebx=00b1fe64 ecx=79f013dc edx=79f90dfc esi=00000000 edi=7ffd9000
eip=7c90e4f4 esp=00b1fe3c ebp=00b1fed8 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!KiFastSystemCallRet:
7c90e4f4 c3              ret
0:001> g
       ^ No runnable debuggees error in 'g'


Een hele lading informatie en zo te zien worden ook de nodige dll's van GtkSharp netjes geladen, echter loopt ie niet door.
Nu heb ik niet extreem veel verstand van debuggers, C# en andere hippe dingen, dus ben ik at random gaan zoeken naar aanknopingspunten met behulp van Google.
Ik heb letterlijk honderden sites en oude bugs gevonden, doorgelezen, weggeklikt omdat de situatie anders was, enz...

Na enige tijd kwam ik er achter dat c0000139 waarschijnlijk het gene is waar hij over valt. Dit betekend namelijk 'Entry point not found', en dat tijdens het inladen van al deze dll's.
Nu gebeurt dit tussen libatk-1.0-0.dll (uit GtkSharp 2.12) en culture.dll (uit de .NET Framework 2.0) in, dus ik ben er niet helemaal zeker van op welke van de twee dit slaat.

Aangezien ik weinig tot geen relevante informatie kan vinden, en hier duidelijk ervaring te kort kom doe ik een beroep op mijn medeTweakers of jullie misschien een idee hebben waar ik nog naar kan kijken.

Mocht GtkSharp echt geen optie zijn dan kan ik uiteraard altijd nog proberen over te stappen op winforms, echter een eerste poging heeft me tot nu toe alleen nog maar wat zaken opgeleverd die niet eens wilden compileren. :P

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Iemand? :P

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 09-09 20:00
Gezien monodevelop ook crossplatform is, zou ik proberen om je project gewoon in monodevelop op windows te debuggen. Ik denk dat je dan meer duidelijke foutmeldingen krijgt, dan de debuggers die je nu gebruikt.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik denk eigenlijk dat winforms sowieso handiger is vanwege minder installatie-problemen. Ik wordt onder windows nooit blij van gtk+-installaties; onder mac os x of embedded devices zal dat niet veel beter zijn denk ik.

Dat winforms er anders uitziet onder mac os x/linux is een minder probleem, en is eerder oplosbaar in de toekomst. Met gtk# zul je altijd gtk nodig gaan hebben. Ik snap dan ook eigenlijk niet waarom ze gtk zoveel voordelen doen toekomen, waardoor het de beste keuze lijkt. Zelf zou ik dan ook gewoon winforms kiezen. :p Ik heb verder wel goede ervaringen met mono, maar dat was niet met GUIs..

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-09 12:01
pedorus schreef op zaterdag 21 augustus 2010 @ 02:47:
Ik denk eigenlijk dat winforms sowieso handiger is vanwege minder installatie-problemen. Ik wordt onder windows nooit blij van gtk+-installaties; onder mac os x of embedded devices zal dat niet veel beter zijn denk ik.
Als je embedded device Linux draait lijkt me Winforms in ieder geval ruk. Of werken die ook onder een ander OS dan Windows?

[ Voor 6% gewijzigd door farlane op 21-08-2010 20:01 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Dll not found of entrypoint not found zou je moeten kunnen herleiden tot een bepaalde dll met Dependency Walker, die geeft wel aan welke dll of entrypoint mist.

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
- peter - schreef op zaterdag 21 augustus 2010 @ 00:51:
Gezien monodevelop ook crossplatform is, zou ik proberen om je project gewoon in monodevelop op windows te debuggen. Ik denk dat je dan meer duidelijke foutmeldingen krijgt, dan de debuggers die je nu gebruikt.
Dat klinkt leuk, maar is extreem veel werk. De SDK voor GtkSharp moet je dan namelijk zelf compileren, aangezien hier geen Windows binaries van zijn.
Er zijn er wel een paar te vinden links en rechts, maar vaak niet de juiste versie of met de nodige bugs en hacks om het werkende te krijgen.
pedorus schreef op zaterdag 21 augustus 2010 @ 02:47:
Ik denk eigenlijk dat winforms sowieso handiger is vanwege minder installatie-problemen. Ik wordt onder windows nooit blij van gtk+-installaties; onder mac os x of embedded devices zal dat niet veel beter zijn denk ik.

Dat winforms er anders uitziet onder mac os x/linux is een minder probleem, en is eerder oplosbaar in de toekomst. Met gtk# zul je altijd gtk nodig gaan hebben. Ik snap dan ook eigenlijk niet waarom ze gtk zoveel voordelen doen toekomen, waardoor het de beste keuze lijkt. Zelf zou ik dan ook gewoon winforms kiezen. :p Ik heb verder wel goede ervaringen met mono, maar dat was niet met GUIs..
Mja, Winforms vind ik ook geen bezwaar, behalve dat het er niet uit ziet onder Linux/OS X en dat ik het niet eens gecompileerd kreeg vanuit MonoDevelop :Y) maar eens op zoek gaan naar een example projectje ergens, alleen nog vrij weinig kunnen vinden...
farlane schreef op zaterdag 21 augustus 2010 @ 20:00:
[...]

Als je embedded device Linux draait lijkt me Winforms in ieder geval ruk. Of werken die ook onder een ander OS dan Windows?
Gelukkig zijn die dankzij Mono wel crossplatform ja :) die implementatie is bijna synchroon.
_js_ schreef op zondag 22 augustus 2010 @ 15:21:
Dll not found of entrypoint not found zou je moeten kunnen herleiden tot een bepaalde dll met Dependency Walker, die geeft wel aan welke dll of entrypoint mist.
Hmm ik heb een poging gedaan daarmee. Deze geeft aan dat ik IESHIMS.DLL en WER.DLL mis, echter zijn dit modules van de Windows Error Reporting onder Windows Vista / 7, dus die schijn ik te mogen ignoren.
Daarnaast was er een (niet gevonden) call naar WNetRestoreConnectionA in MPR.DLL, echter dit is een soort check of het systeem Windows 9x of nieuwer draait volgens mijn Google zoektocht (is vervangen door WNetRestoreConnectionW, waarna later naar gecalled wordt) en mag ik dus ook negeren.

Verder komen er geen foutmeldingen langs gek genoeg, echter zie ik het laden van de GTK libs ook niet langskomen (kan ik DW deze fouten laten negeren en 'door laten gaan' oid?) en ook de culture.dll van de .NET Framework zie ik niet, wat mij doet vermoeden dat hij nog lang niet klaar is met laden, maar op de eerste fout die 'ie tegenkomt stopt.

Iemand nog tips?

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-09 12:01
Noxious schreef op maandag 23 augustus 2010 @ 10:37:
[...]

Gelukkig zijn die dankzij Mono wel crossplatform ja :) die implementatie is bijna synchroon.
Ah ok dat wist ik niet. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Grootste nadeel is dat je alles moet typen en er geen GUI editor is, althans...
In theorie is die er, maar deze is zo instabiel en buggy... :X

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Schopje, iemand nog een idee wat ik kan doen? ;)

  • beany
  • Registratie: Juni 2001
  • Laatst online: 16:42

beany

Meeheheheheh

Als het een beetje goed is opgezet is een SDK eenvoudig te compileren. Meestal is het 1 script aanroepen, en dat staat duidelijk ergens in een readme. Dus ik zou toch voor die optie gaan.

Verder zou je nog Visual Studio Express(die is gratis, legaal!) kunnen installeren en vanuit daar de GtkSharp libraries aanspreken om te kijken wat het gedrag dan is.

Verder zou ik het ook niet zo weten, doe wel veel C#, maar niet met mono :P

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Normaal is dat inderdaad niet zo'n huge probleem, maar in het geval van GtkSharp schijnt dat de nodige complicaties met zich mee te brengen.
Ik heb een middagje de mailinglist gelezen en daar komen vrijwel alleen maar compilatieproblemen langs. Om daar nou een halve week aan te besteden :+

Acties:
  • 0 Henk 'm!

  • __fred__
  • Registratie: November 2001
  • Laatst online: 09-09 09:53
Waarom schrijf je geen Windows GUI in winforms en een linux / osx gui met GTKSharp? Twee gui's zou met een goed opgebouwde applicatie niet verschrikkelijk veel werk hoeven zijn. Best of both worlds.

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Mogelijk, maar dat vind ik eigenlijk dubbel werk :+

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 16:42

beany

Meeheheheheh

Je hebt het probleem nog steeds niet opgelost??

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua

Pagina: 1