[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Calling VB6 dll from Ruby

lrlebron@gmail.com

8/29/2007 1:06:00 PM

I am trying to use a VB6 dll created by another programmer from Ruby.
To see what was I opened it in Visual Studio's object browser. It has
a series of classes with their methods and properties. I want to acess
the Load method in the SalesContract class. Here's my code (which is
probably wrong)

require 'Win32API'
@ops = Win32API.new('SMD Client.dll','SalesContract::Load','I','P')

Here's the error message I'm getting

C:/Data/Projects/Smd_Ruby/testdll.rb:2:in `initialize':
GetProcAddress: SalesContract::Load or SalesContract::LoadA
(RuntimeError)
from C:/Data/Projects/Smd_Ruby/testdll.rb:2:in `new'
from C:/Data/Projects/Smd_Ruby/testdll.rb:2

I'm not sure that this is even possible. Any help would be greatly
appreciated.

Luis

2 Answers

Mike Woodhouse

8/29/2007 1:27:00 PM

0

On Aug 29, 2:06 pm, "lrleb...@gmail.com" <lrleb...@gmail.com> wrote:
> I am trying to use a VB6 dll created by another programmer from Ruby.
> To see what was I opened it in Visual Studio's object browser. It has
> a series of classes with their methods and properties. I want to acess
> the Load method in the SalesContract class. Here's my code (which is
> probably wrong)
>
> require 'Win32API'
> @ops = Win32API.new('SMD Client.dll','SalesContract::Load','I','P')
>
> Here's the error message I'm getting
>
> C:/Data/Projects/Smd_Ruby/testdll.rb:2:in `initialize':
> GetProcAddress: SalesContract::Load or SalesContract::LoadA
> (RuntimeError)
> from C:/Data/Projects/Smd_Ruby/testdll.rb:2:in `new'
> from C:/Data/Projects/Smd_Ruby/testdll.rb:2
>

I haven't tried this from Ruby, but VB6 DLLs are actually "ActiveX" or
COM DLLs, so you should probably be trying to talk to them using the
Win32OLE library.

HTH,

Mike

lrlebron@gmail.com

8/29/2007 1:42:00 PM

0

On Aug 29, 8:27 am, Mike Woodhouse <mikewoodho...@gmail.com> wrote:
> On Aug 29, 2:06 pm, "lrleb...@gmail.com" <lrleb...@gmail.com> wrote:
>
>
>
>
>
> > I am trying to use a VB6 dll created by another programmer from Ruby.
> > To see what was I opened it in Visual Studio's object browser. It has
> > a series of classes with their methods and properties. I want to acess
> > the Load method in the SalesContract class. Here's my code (which is
> > probably wrong)
>
> > require 'Win32API'
> > @ops = Win32API.new('SMD Client.dll','SalesContract::Load','I','P')
>
> > Here's the error message I'm getting
>
> > C:/Data/Projects/Smd_Ruby/testdll.rb:2:in `initialize':
> > GetProcAddress: SalesContract::Load or SalesContract::LoadA
> > (RuntimeError)
> > from C:/Data/Projects/Smd_Ruby/testdll.rb:2:in `new'
> > from C:/Data/Projects/Smd_Ruby/testdll.rb:2
>
> I haven't tried this from Ruby, but VB6 DLLs are actually "ActiveX" or
> COM DLLs, so you should probably be trying to talk to them using the
> Win32OLE library.
>
> HTH,
>
> Mike- Hide quoted text -
>
> - Show quoted text -

I tried registering the dll and using win32ole but didn't have any
luck.
Here's the code
require 'win32ole'
smd = WIN32OLE.new('SMDClient')

Here's the error message
C:/Data/Projects/Smd_Ruby/testdll.rb:4:in `initialize': unknown OLE
server: `SMDClient' (WIN32OLERuntimeError)
HRESULT error code:0x800401f3
Invalid class string from C:/Data/Projects/Smd_Ruby/testdll.rb:
4:in `new'
from C:/Data/Projects/Smd_Ruby/testdll.rb:4