[Seaside] Squeak/.Net question

Valdas Bucinskas valdas.bucinskas at ipsistemos.lt
Wed Sep 14 08:50:15 CEST 2005


Sry. my initial intention wasn't clearly stated in the first post. I wanted
to make seaside app, which allow the user to press button and get COM object
window.  I found tutorial at http://minnow.cc.gatech.edu/squeak/3773 and
started walking trough it.

You mentioned Squeak/.NET Bridge version R9. I see only R7 in my package
loader :(
I tried installing it with VMMaker, but then I get primitive fail error
executing DotNet startNew. So I switched back to R5, which seemed to work
fine.

The tutorial I mentioned above uses *.ocx file. I tried doing the same with
*.tlb file (generated it with Gupta SQL Windows). The only difference from
tutorial was that I generated DLL pointing tlbimp utility to *.tlb instead
of  *.ocx. There are two methods (sayThis and sayOne) in my file. Here is
what I got (taken from Lutz Roeder's .NET Reflector):

namespace guptacomtest2
{
      [ComImport, CoClass(typeof(DoerClass)),
Guid("3F6D4C7A-B79B-4078-8689-F5876695D3AC")]
      public interface Doer : IDoer
      {
      }

      [ComImport, TypeLibType(2), DefaultMember("sayThis"),
Guid("CD60B8E2-627E-4B06-A75B-B57A48002FBF"), ClassInterface(0)]
      public class DoerClass : IDoer, Doer
      {
            // Methods
            [PreserveSig, MethodImpl(MethodImplOptions.InternalCall,
MethodCodeType=MethodCodeType.Runtime), DispId(1)]
            public virtual extern void sayOne();
            [PreserveSig, MethodImpl(MethodImplOptions.InternalCall,
MethodCodeType=MethodCodeType.Runtime), DispId(0)]
            public virtual extern void sayThis([In,
MarshalAs(UnmanagedType.BStr)] string sParm);
      }

      [ComImport, InterfaceType(2), DefaultMember("sayThis"),
Guid("3F6D4C7A-B79B-4078-8689-F5876695D3AC"), TypeLibType(0x1000)]
      public interface IDoer
      {
            [PreserveSig, MethodImpl(MethodImplOptions.InternalCall,
MethodCodeType=MethodCodeType.Runtime), DispId(0)]
            void sayThis([In, MarshalAs(UnmanagedType.BStr)] string sParm);
            [PreserveSig, MethodImpl(MethodImplOptions.InternalCall,
MethodCodeType=MethodCodeType.Runtime), DispId(1)]
            void sayOne();
      }
}

Now I try calling these methods this way:

DotNet Assembly loadFrom: 'guptacomtest2.dll'.
DotNet startNew.
shell := DotNet DoerClass new.

And the Squeak hangs on the execution of the last line. I have to terminate
process with ALT+dot. I see (last 2 lines).

Semaphore>>waitTimoutMSecs:
DotNetSocket(OldSocket)>>waitForDataUntil:

So the questions are:
1. Is there any differences between generation of DLL using *.tlb instead of
*.ocx? Any info about what program to use to build the ocx or tbl that
Squeak understands would be very much appreciated.
2. Any other ideas what I did wrong?

Best regards,
Valdas



More information about the Seaside mailing list