[omniORB] VB -> CORBA (omniORB2) help needed - Please...

Jim Redman jim@ergotech.com
Tue, 15 Dec 1998 05:56:53 -0700


There's no reason in principle why this should not work.  I've used a DLL
with omniORB under Windows as a cover for languages other than C++,
including Java and others, but not specifically VB.  If the code exactly as
described crashes then I have no useful suggestion, but wish you good luck.
 If the code requires other calls to the ORB in the middle in order to
crash then I would look at the calling convention.  If you are already
using STDCALL conventions (watch GCC which is not at all clear on this
concept) then I again have no suggestions.  You can, by and large, call
CDECL methods from VB without any immediate error.  However you will
corrupt the stack doing this and can reasonably expect the application to
crash at some later date.  This crash is often fairly consistant but
usually not in the same region as the error.

At 12:04 PM 12/15/98 +0100, you wrote:
>Greetings,
>
>Recently I posted the following question, but got no response what so ever.
>OK, I know that it is obscene to even consider calling CORBA objects from
>Visual Basic, but never the less that is what I would like to do...
>
>Maybe someone has an idea as to why my VB application goes down after the
>DLL process is detached. Is there something omniORB specific I could do in
>the 'case DLL_PROCESS_DETACH:' branch to avoid this??? Free some resources
>etc.? Any ideas will be appreciated!
>
>Best regards,
>
>	Ole.Received: from shallot.cam-orl.co.uk (shallot.cam-orl.co.uk
[158.124.64.109])
>	by hermes.ifad.dk (8.8.8/8.8.8) with ESMTP id QAA02217
>	for <storm@ifad.dk>; Thu, 3 Dec 1998 16:13:05 +0100 (MET)
>Received: from majordom by shallot.cam-orl.co.uk with local (Exim 2.02 #3)
>	id 0zla5u-0005Di-00
>	for omniorb-list-outgoing@orl.co.uk; Thu, 3 Dec 1998 14:51:02 +0000
>Received: from hermes.ifad.dk ([130.225.136.3])
>	by shallot.cam-orl.co.uk with esmtp (Exim 2.02 #3)
>	id 0zla5s-0005DN-00
>	for omniorb-list@orl.co.uk; Thu, 3 Dec 1998 14:51:00 +0000
>Received: from ifad.dk (albani.ifad.dk [130.225.136.12])
>	by hermes.ifad.dk (8.8.8/8.8.8) with ESMTP id PAA01613
>	for <omniorb-list@orl.co.uk>; Thu, 3 Dec 1998 15:50:54 +0100 (MET)
>Message-ID: <3666A4B7.D7BD4919@ifad.dk>
>Date: Thu, 03 Dec 1998 15:48:23 +0100
>From: Ole Storm <storm@ifad.dk>
>Organization: IFAD
>X-Mailer: Mozilla 4.5 [en] (WinNT; I)
>X-Accept-Language: en
>MIME-Version: 1.0
>To: "omniorb-list@orl.co.uk" <omniorb-list@orl.co.uk>
>Subject: [omniORB] Calling omniORB from Visual Basic...
>Content-Type: text/plain; charset=us-ascii
>Content-Transfer-Encoding: 7bit
>Sender: owner-omniorb-list@orl.co.uk
>Precedence: bulk
>X-Mozilla-Status2: 00000000
>
>Greetings omniORB'ers
>
>I would like to be able to call a Corba object from Visual Basic. I am aware
>that one way to achieve this would be to "wrap" my Corba object in a COM
>interface, but I think it would take me too long to do this...
>
>What I would like to do in stead is the following:
>
>Write a C++ DLL that makes the appropriate calls to the ORB and the Corba
>object, and then access this DLL from VB.
>
>I have managed writing a simple DLL, and it is actually possible to call its
>exported functions from VB. However, when I try to make a omniORB specific
>call in the DLL things start to go wrong. For instance I will initialize the
>ORB and the BOA in the DllMain like this:
>
>BOOL APIENTRY DllMain(HANDLE hModule, 
>                      DWORD  ul_reason_for_call, 
>                      LPVOID lpReserved)
>{
>  int dummy = 0;
>  switch( ul_reason_for_call ) {
>  case DLL_PROCESS_ATTACH:
>    _the_orb = CORBA::ORB_init(dummy, NULL, "omniORB2");
>    _the_boa = _the_orb->BOA_init(dummy, NULL, "omniORB2_BOA");
>    break;
>
>  case DLL_PROCESS_DETACH:
>    break;
>  }
>  return TRUE;
>}
>
>What happens is this: The first time VB calls a function in the DLL, the ORB
>and BOA are initialized all-right, and subsequent Corba calls are OK as
>well. When the VB "kode" is finished (I use an Excel macro to test the DLL)
>the DllMain function is called with ul_reason_for_call=DLL_PROCESS_DETACH -
>which seems OK as well.
>
>Now I simply wait... After 20-30 secconds my VB application (here Excel)
>simply goes down - just like that. If I omit the calls to initialize the ORB
>and BOA everything works fine!
>
>I have read the notes in CORBA_sysdep.h stating that USE_stub_in_nt_dll
>should be defined before including the stub headers (.hh) and I compile the
>stub cc files with the macro-option -D_OMNIORB2_STUB_DLL
>
>Any clues as to what might be wrong???
>
>Maybe something should be released or destroyed when DllMain is called with 
>the DLL_PROCESS_DETACH flag???
>
>
>Any help will be appreciated!
>
>Best regards,
>
>	Ole.
>
>---------------------------------------------------------------
>Ole Storm
>The Institute of Applied Computer Science (IFAD)
>Forskerparken 10, DK-5230 Odense M, Denmark
>Phone: +45 6315 7134, Fax: +45 6593 2999, Email: storm@ifad.dk
>WWW: http://www.ifad.dk
>---------------------------------------------------------------
>
>
>
Jim Redman
+1 505 662 5156
http://www.ergotech.com