[Kde-bindings] Qt3 Kimono version - got it compiled

Arno Rehn kde-bindings at arnorehn.de
Fri Nov 25 19:17:56 UTC 2005


Am Freitag, 25. November 2005 20:50 schrieb Richard Dale:
> On Friday 25 November 2005 18:48, Arno Rehn wrote:
> > Am Freitag, 25. November 2005 19:29 schrieb Richard Dale:
> > > Good news! That was fast work, maybe we ought to turn it into a proper
> > > project?
> > >
> > > I can't see anything special about SetCaption():
> > >
> > > baldhead duke 1071% grep SetCaption *.cs
> > > QDockWindow.cs:         public new void SetCaption(string s) {
> > > QDockWindow.cs:                 ProxyQDockWindow().SetCaption(s);
> > > QWidget.cs:             public virtual void SetCaption(string arg1) {
> > > QWidget.cs:                     ProxyQWidget().SetCaption(arg1);
> > >
> > > Is it the only method that is passed an argument in your example?
> > >
> > > It is certainly in the Smoke library. I put debugging on this QtRuby
> > > example to trace the call, and it looks fine to me:
> >
> > Ok, the sources are at the end of the message, but currently I have
> > another problem. If I run anything with the Qt-bindings, I get this:
> >
> >
> > In AddGetSmokeObject 0x40abe778
> > In AddSetSmokeObject 0x40abe818
> > In AddMapPointer 0x40abe8b8
> > In AddUnmapPointer 0x40abe958
> > In AddGetPointerObject 0x40abe9f8
> > Invoke() MethodName: NewQApplication Type: Qt.QApplication, Qt,
> > Version=0.0.0.0, Culture=neutral, PublicKeyToken=null ArgCount: 1
> >
> > =================================================================
> > Got a SIGSEGV while executing native code. This usually indicates
> > a fatal error in the mono runtime or one of the native libraries
> > used by your application.
> > =================================================================
> >
> > Stacktrace:
> >
> > in <0x4> (wrapper managed-to-native) Qt.SmokeInvocation:FindMethodId
> > (string,string)
> > in <0xfffffe8b> (wrapper managed-to-native)
> > Qt.SmokeInvocation:FindMethodId (string,string)
> > in <0x43> Qt.SmokeInvocation:FindMethod (string)
> > in <0x33b> Qt.SmokeInvocation:Invoke
> > (System.Runtime.Remoting.Messaging.IMessage)
> > in <0x2e5> System.Runtime.Remoting.Proxies.RealProxy:PrivateInvoke
> > (System.Runtime.Remoting.Proxies.RealProxy,System.Runtime.Remoting.Messag
> >in g.IMessage,System.Exception&,object[]&) in <0xc73bd7df> (wrapper
> > runtime-invoke)
> > System.Object:runtime_invoke_object_RealProxy_IMessage_Exception&_object[
> >]& (object,intptr,intptr,intptr)
> > in <0x4> (wrapper remoting-invoke) Qt.QApplication:NewQApplication
> > (string[]) in <0xffffffc1> (wrapper remoting-invoke)
> > Qt.QApplication:NewQApplication (string[])
> > in <0xffffff31> (wrapper remoting-invoke-with-check)
> > Qt.QApplication:NewQApplication (string[])
> > in <0x19> Qt.QApplication:NewQApplication (string[])
> > in <0x23> Qt.QApplication:.ctor (string[])
> > in <0xffffffdd> (wrapper remoting-invoke-with-check)
> > Qt.QApplication:.ctor (string[])
> > in <0x25> MainForm:Main (string[])
> > in <0xc7678b97> (wrapper runtime-invoke)
> > System.Object:runtime_invoke_void_string[] (object,intptr,intptr,intptr)
> >
> > Native stacktrace:
> >
> >         mono(mono_handle_native_sigsegv+0xba) [0x81471da]
> >         mono [0x81354cf]
> >         [0xffffe440]
> >         /opt/kde3/lib/libqyoto.so(_ZN5Smoke10findMethodEPKcS1_+0x14)
> > [0x40d8d982]
> >         /opt/kde3/lib/libqyoto.so(FindMethodId+0x1a) [0x40d8d1d6]
> >         [0x424e0a89]
> >         [0x424e08d4]
> >         [0x424db2ac]
> >         [0x40d782ce]
> >         [0x40d77bd5]
> >         mono [0x8135380]
> >         mono(mono_runtime_invoke+0x27) [0x80d42b7]
> >         mono(mono_remoting_invoke+0x4e) [0x80d6d4e]
> >         mono [0x80a97a7]
> >         [0x40d779ea]
> >         [0x40d77972]
> >         [0x40d7786a]
> >         [0x40d704e4]
> >         [0x40abd22a]
> >         [0x40abd1de]
> >         [0x40abc813]
> >         mono [0x8135380]
> >         mono(mono_runtime_invoke+0x27) [0x80d42b7]
> >         mono(mono_runtime_exec_main+0x5c) [0x80d513c]
> >         mono(mono_runtime_run_main+0x171) [0x80d4d61]
> >         mono(strftime+0x1b52) [0x805cb72]
> >         mono(mono_main+0x785) [0x805d485]
> >         mono(__fxstat64+0x12b) [0x805bf3b]
> >         /lib/tls/libc.so.6(__libc_start_main+0xd0) [0x4013fea0]
> >         mono(sinh+0x41) [0x805be91]
> >
> >
> > I don't know why this happens, I really didn't do ANYTHING on my system,
> > I just started the program again and this was the result.
>
> Yes, it won't do anything because I hadn't got as far as the code to invoke
> a method. I'll have a look at what is going wrong with the method look up.
> I also can't remember how far I got with marshalling C# args to C++ ones
> and putting them on the Smoke::Stack.
But why had it already worked? I had a real Window with a real TextEdit and a 
real PushButton on my Display...
I took a look at your "doit.cs" (doit.exe makes no problems while executing) - 
I don't know what it should do but I found the lines
	[DllImport("libqyoto", CharSet=CharSet.Ansi)]
	static extern void Init_qyoto();
in the file. When I add the same in my Code and call Init_qyoto() at the 
beginning there isn't this SIGSEV error anymore. Then there's only an error 
that an Index is less than 0...
>
> > but now my sources:
> >
> > using System;
> > using Qt;
> >
> > class MainForm : QDialog
> > {
> > 	public static void Main (string[] args)
> > 	{
> > 		Qt.QApplication qa = new Qt.QApplication(args);
> > 		MainForm mf = new MainForm();
> > 		mf.Show();
> > 		qa.SetMainWidget(mf);
> > 		qa.Exec();
> > 	}
> >
> > 	public MainForm()
> > 	{
> > 		this.Show();
> > 		QVBoxLayout qgrid = new QVBoxLayout(this);
> > 		qgrid.SetAutoAdd(true);
> > 		QTextEdit te = new QTextEdit(this);
> > 		te.Show();
> > 		QPushButton button = new QPushButton(this);
> > 		button.SetCaption("Hello World!");
> > 		button.Show();
> > 	}
> > }
> >
> >
> > and the problem also occurs with some constructors with more than 1
> > argument.
>
> Well I would expect those constructors to be overloaded. I've forgotten how
> far I got - it is failing when it looks for the very first method looking
> for The Qt.QApplication constructor. I'm afraid I'm not on the internet at
> weekends at the moment, so I'll have a look at report back on Monday. It
> needs to at least get as far as calling FindMethodId() in qt3qyoto.cpp.
As I left the "button.SetCaption("Hello World!")" out, the program ran. 

-- 
Arno Rehn
arno at arnorehn.de



More information about the Kde-bindings mailing list