Oh. I didn't see this when I replied to Oleg's post.

Will use this instead. Will let you know as soon as I'ved worked on it. 

Thanks.

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Eric Iverson
Sent: Thursday, August 14, 2008 8:02 AM
To: Programming forum
Subject: Re: [Jprogramming] J602a Crash after .NET App Quit

I just ran a few tests and it seems you need a form with an ijx window
to
avoid the crash. It does not need to be shown.

Add the code:
   jObject.Do("11!:0'pc abc;cc e editijx;'");

after the Quit() call in Form1_Load_1
This doesn't make any sense, but appears to be a workaround.
On Wed, Aug 13, 2008 at 6:28 PM, Eric Iverson
<[EMAIL PROTECTED]>wrote:

>  The most likely thing loading profile does that avoids the crash is
to
> create an ijx window which is then shown. I suspect that this problem
is
> related to the one discovered earlier by Devon where 11!:0'pc foo' was
an
> adequate workaround.
>
> I suggest trying experiments without loading profile and
creating/showing
> windows in slightly different ways to get a workaround. For example:
>
> create a window (the one you already did, but make sure it works)
> create and show a window
> create two windows
> create and show two windows
> create a window with an ijx control
>  create a window with an ijx control and show it
>
> These tests may lead you to a kludge workaround.
>
> I will probably be work on the root of this problem in a week or so
and
> will report back what I find.
>   On Wed, Aug 13, 2008 at 2:31 PM, Oleg Kobchenko
<[EMAIL PROTECTED]>wrote:
>
>> Since it was established that loading profile DOES NOT
>> crash J, it should be possible, by elimination, to narrow
>> it down to the code that actually prevents crashing.
>> With two benefits: allow to ship with only limited
>> code; may shed light on nature of the problem.
>>
>>
>>
>> > From: Alex Rufon <[EMAIL PROTECTED]>
>> >
>> > Hi.
>> >
>> > I was wondering if anybody got some headway with this problem of
mine.
>> >
>> > I would appreciate any insight on the problem.
>> >
>> > r/alex
>> >
>> > NOTE:
>> > This is me saying "bump".
>> >
>> >
>> > -----Original Message-----
>> > From: [EMAIL PROTECTED]
>> > [mailto:[EMAIL PROTECTED] On Behalf Of Alex Rufon
>> > Sent: Thursday, August 07, 2008 5:14 PM
>> > To: Programming forum
>> > Subject: RE: [Jprogramming] J602a Crash after .NET App Quit
>> >
>> > Hello.
>> >
>> > It took some time for me to test since I had to attend a few brain
>> > numbing meetings today.
>> >
>> > Ok. Here is what I got. I followed Oleg's advice and added the
following
>> > code to the form:
>> >         ///
>> >         /// Clean up any resources being used.
>> >         ///
>> >         /// true if managed resources should be
>> > disposed; otherwise, false.
>>  >         protected override void Dispose(bool disposing)
>> >         {
>> >             if (disposing && (components != null))
>> >             {
>> >                 components.Dispose();
>> >             }
>> >
>> >             if (jObject != null)
>> >             {
>> >                 Marshal.FinalReleaseComObject(jObject);
>> >                 jObject = null;
>> >             }
>> >
>> >             base.Dispose(disposing);
>> >         }
>> >
>> > As what he said, J crashes when this code is executed:
>> > Marshal.FinalReleaseComObject(jObject);
>> >
>> > Then I tried out Devon's suggestion and modified the form load to
this:
>> >         private void Form1_Load(object sender, EventArgs e)
>> >         {
>> >             jObject = new JEXEServerLib.JEXEServerClass();
>> >             jObject.Quit();
>> >             jObject.Log(1);
>> >
>> >             jObject.Do("11!:0 'pc dummyForm'");
>> >             jObject.Do("[res=: 'The answer is 42'");
>> >             object objTest;
>> >             jObject.GetB("res", out objTest);
>> >             string jScript = (string)objTest;
>> >             MessageBox.Show(jScript);
>> >
>> >         }
>> >
>> > Even with the code above, J still crashes. Am I doing this right?
>> >
>> > So I then tried a different approach which is to load the profile:
>> >         private void Form1_Load(object sender, EventArgs e)
>> >         {
>> >             jObject = new JEXEServerLib.JEXEServerClass();
>> >             jObject.Quit();
>> >             jObject.Log(1);
>> >
>> >             jObject.Do("BINPATH_z_=: 1!:46 ''");
>> >             jObject.Do("ARGV_z_=: ,<'oleclient'");
>> >             jObject.Do("0!:0
>>  >             jObject.Show(1);
>> >             object objTest;
>> >             jObject.GetB("BINPATH", out objTest);
>> >             string jScript = (string)objTest;
>> >             MessageBox.Show(jScript);
>> >         }
>> >
>> > This one DOES NOT crash but defeats the purpose of only
distributing
>> > J.EXE and J.DLL with the IJS script since it requires a full
install of
>> > J.
>> >
>> > I would appreciate any help or suggestions.
>> >
>> > Thanks.
>> >
>> > r/alex
>> >
>> > -----Original Message-----
>> > From: [EMAIL PROTECTED]
>> > [mailto:[EMAIL PROTECTED] On Behalf Of Oleg
Kobchenko
>> > Sent: Thursday, August 07, 2008 1:55 AM
>> > To: Programming forum
>> > Subject: Re: [Jprogramming] J602a Crash after .NET App Quit
>> >
>> > >From what I can see, in the end you do
>> >
>> > >             jObject = null;
>> >
>> > which causes object destruction on the GC thread,
>> > but it was created on the main thread. This may be disastrous.
>> >
>> > To avoid this, you need to release COM object explicitly
>> > (google it):
>> >
>> >         #region IDisposable Members
>> >
>> >         public void Dispose() {
>> >             if (_comobj != null) {
>> >                 Marshal.FinalReleaseComObject(_comobj);
>> >                 GC.SuppressFinalize(_comobj);
>> >                 _comobj = null;
>> >             } else {
>> >                 // MyTrace.Write("Disposing uninitialized
object.");
>> >             }
>> >         }
>> >
>> > (Also, shouldn't it be FormClosed event?)
>> >
>> > However, this does not fix the error, only to track it easily.
>> > It allows to place the breakpoint and see that the crash
>> > happens in release:
>> >
>> >     Marshal.FinalReleaseComObject(_comobj);
>> >
>> > Switching back to j601 does not reproduce the error.
>> >
>> > wd 'pc f;...pshow...' does not help.
>> >
>> > Crash details:
>> >
>> > Unhandled exception at 0x7c915375 (ntdll.dll) in j.exe: 0xC0000005:
>> > Access violation reading location 0x00e3000c.
>> >
>> > >    ntdll.dll!bsearch()  + 0x1a2 bytes
>> >      [Frames below may be incorrect and/or missing, no symbols
loaded
>> > for ntdll.dll]
>> >      ntdll.dll!bsearch()  + 0x157 bytes
>> >      ntdll.dll!bsearch()  + 0xba bytes
>> >      ntdll.dll!RtlFindActivationContextSectionString()  + 0x80
bytes
>> >      ntdll.dll!RtlDosApplyFileIsolationRedirection_Ustr()  + 0x34e
bytes
>> >
>> >      ntdll.dll!RtlDosApplyFileIsolationRedirection_Ustr()  + 0x20f
bytes
>> >
>> >      ntdll.dll!LdrGetDllHandleEx()  + 0xa7 bytes
>> >      ntdll.dll!LdrGetDllHandle()  + 0x18 bytes
>> >      kernel32.dll!GetModuleHandleW()  + 0x57 bytes
>> >      kernel32.dll!GetModuleHandleW()  + 0x16e bytes
>> >      kernel32.dll!GetModuleHandleW()  + 0x1f bytes
>> >      kernel32.dll!GetModuleHandleA()  + 0x1f bytes
>> >      j.exe!00453a98()
>> >      j.exe!00453abc()
>> >      j.exe!00453ce1()
>> >      j.exe!00453d06()
>> >      j.exe!00418073()
>> >      j.exe!004189fc()
>> >      j.exe!00430f54()
>> >      ole32.dll!DcomChannelSetHResult()  + 0x190 bytes
>> >      ole32.dll!77600b36()
>> >      ole32.dll!77600b43()
>> >      j.exe!0042d0a4()
>> >      j.exe!0042f5b7()
>> >      j.exe!0043f767()
>> >      j.exe!0042a882()
>> >      j.exe!00435a6a()
>> >      j.exe!0042f644()
>> >      user32.dll!GetDC()  + 0x6d bytes
>> >      user32.dll!GetDC()  + 0x14f bytes
>> >      user32.dll!GetWindowLongW()  + 0x127 bytes
>> >      user32.dll!DispatchMessageW()  + 0xf bytes
>> >      j.exe!00418230()
>> >      j.exe!00417c54()
>> >      j.exe!0046756e()
>> >      j.exe!0045143d()
>> >      kernel32.dll!RegisterWaitForInputIdle()  + 0x49 bytes
>> >
>> >
>> > > From: Alex Rufon
>> > >
>>  > > I'm currently in the process of migrating to J602a (again) and I
hit
>> a
>> > > brick wall. J would crash right after the calling .NET
application
>> > > exits.
>> > >
>> > > First off, I'm using the following softwares:
>> > > 1. Vista Ultimate
>> > > 2. C# on Visual Studio .NET 2005 Professional Edition
>> > >
>> > > Since I know that not everyone has my version of Visual Studio
.NET, I
>> > > replicated the problem using the FREE Visual Studio .NET 2008
Express
>> > > Edition. You can download a copy from here:
>> > > http://www.microsoft.com/express/default.aspx
>> > >
>> > > So follow these steps to replicate the crash:
>> > > 1. Run Microsoft Visual C# 2008 Express Edition
>> > > 2. Create a new Windows Application project. The automatically
created
>> > > project should have a form named form1
>> > > 3. Add a reference to J602\bin\j.exe
>> > > 4. Add a button to form1
>> > > 5. Add the following code into form1:
>> > >
>> > > using System;
>> > > using System.Collections.Generic;
>> > > using System.ComponentModel;
>> > > using System.Data;
>> > > using System.Drawing;
>> > > using System.Linq;
>> > > using System.Text;
>> > > using System.Windows.Forms;
>> > >
>> > > namespace WindowsFormsApplication1
>> > > {
>> > >     public partial class Form1 : Form
>> > >     {
>> > >         private JEXEServerLib.JEXEServerClass jObject;
>> > >         public Form1()
>> > >         {
>> > >             InitializeComponent();
>> > >         }
>> > >
>> > >         private void Form1_Load(object sender, EventArgs e)
>> > >         {
>> > >             jObject = new JEXEServerLib.JEXEServerClass();
>> > >             jObject.Quit();
>> > >         }
>> > >
>> > >         private void button1_Click(object sender, EventArgs e)
>> > >         {
>> > >             jObject.Do("[res=: i. 1024 1024");
>> > >         }
>> > >
>> > >         private void Form1_FormClosing(object sender,
>> > > FormClosingEventArgs e)
>> > >         {
>> > >             jObject = null;
>> > >         }
>> > >     }
>> > >
>> > > }
>> > >
>> > > As you can see from the code above. This project will do nothing
but
>> > > create an instance of J when it loads. A button that would just
make a
>> > > 1024x1024 matrix inside the J instance and then set the jObject
>> > variable
>> > > to nothing when it closes.
>> > >
>> > > The problem is that after this application closes, J will crash
>> > > spectacularly. :)
>> > >
>> > > I have tested this in VB.NET <http://vb.net/> and C# in both
Visual
>> Studio .NET 2005
>> > > Professional and 2008 Express edition.
>> > >
>> > > I am hoping that I am just missing a step somewhere. Like maybe I
need
>> > > to call a "release" manually? Any insight would be helpful.
>> > >
>> > > Thanks.
>> > >
>> > > r/alex
>> > >
----------------------------------------------------------------------
>> > > For information about J forums see
>> http://www.jsoftware.com/forums.htm
>> >
>> >
>> >
>> >
>> >
----------------------------------------------------------------------
>> > For information about J forums see
http://www.jsoftware.com/forums.htm
>> >
----------------------------------------------------------------------
>> > For information about J forums see
http://www.jsoftware.com/forums.htm
>> >
----------------------------------------------------------------------
>> > For information about J forums see
http://www.jsoftware.com/forums.htm
>>
>>
>>
>>
>>
----------------------------------------------------------------------
>> For information about J forums see
http://www.jsoftware.com/forums.htm
>>
>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to