Solved

Calling functions in VB6 ActiveX DLL Using JNI in Java

Posted on 2014-04-18
7
1,501 Views
Last Modified: 2014-04-19
I have an old VB6 program that is 10 years old, and it is communicating with the COM interface of a commercial program of the time, PADS Layout 2005. I would like to reuse my fully functional code contained in the VB6 program I wrote at the time in a Java program, and also since all the examples for communicating with PADS layout are done in VB6 or a proprietary VB scripting API, it would be very hard to do anything else, practically.

So I want to put all essential code from the VB6 program into a VB6 ActiveX DLL, wrap it into a VC++ DLL and access functions in it it with JNI using Java.

I found a simple example, that looked very reasonable, that worked to a certain point:

https://www.classle.net/book/creation-dll-vb-and-deployment-java-using-jni

It is just adding up 2 int numbers converted to String and displayed, the activeX dll VB6 function used:

Public Function add(ByVal a As Integer, ByVal b As Integer)

MsgBox "Result: " + CStr(a + b) 'Convert to String function

End Function

Open in new window



I did the exact same thing as suggested in example, same folder structure and file names, and I got all the way to creating the header files, as described at the link above:

 4) Now create the JNI header files for the class file using the following command

                   javah  –jni  NativeImpl

All I get is various error messages, I tried several things:

Running javah on command line
I am using an XP virtual machine, Visual Studio 6 installed, which includes Visual Basic 6 and Visual C++ 6.0 to make the wrapper DLL. I am using older Java 1.6, and still I slightly had to change code to avoid using a depricated method. I also did a decompile on the Java class file I created, just to check, but it looks fine to me:

// Decompiled by DJ v3.11.11.95 Copyright 2009 Atanas Neshkov  Date: 4/18/2014 7:18:57 AM
// Home Page: http://members.fortunecity.com/neshkov/dj.html  http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   NativeImpl.java

import java.io.*;

public class NativeImpl
{

    public NativeImpl()
    {
    }

    public native void add(int i, int j);

    public static void main(String args[])
        throws IOException
    {
        DataInputStream datainputstream = new DataInputStream(System.in);
        NativeImpl nativeimpl = new NativeImpl();
        System.out.println("Enter number 1 & 2:");
        int i = Integer.parseInt(datainputstream.toString());
        int j = Integer.parseInt(datainputstream.toString());
        nativeimpl.add(i, j);
    }

    static 
    {
        System.loadLibrary("dllproj");
    }
}

Open in new window


The only change I had to make in the OS is adding a CLASSPATH, so that the javac compiler could be found on command line. that should be enough, right?:
CLASSPATH
I have all the files, in the zip file on my Google drive:

https://drive.google.com/file/d/0BzAVH2D-BU9IQ21tcDZwb1RhUXc/edit?usp=sharing

(Expert Exchange did not let me upload a zip containing a dll)

Thank you for your help.
0
Comment
Question by:AttilaB
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
7 Comments
 
LVL 86

Accepted Solution

by:
CEHJ earned 500 total points
ID: 40009346
You'll find it much easier using JNA
0
 

Author Comment

by:AttilaB
ID: 40009460
Ok. I can do that. However, let's suppose I create an ActiveX DLL from the VB6 code I want to reuse. Do I still need to wrap it into a C++ DLL before I have access to it through JNA?

If yes, since I don't really have much experience with C++, can you point me to some step-by-step example on how to do that?
(I mostly did Java and VB6)

Or is there perhaps a good working example of how to go from an ActiveX DLL connecting all the way to Java, using JNA?

Thanks.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 40009721
Do I still need to wrap it into a C++ DLL before I have access to it through JNA?
No, JNA can access the library directly
0
Transaction Monitoring Vs. Real User Monitoring

Synthetic Transaction Monitoring Vs. Real User Monitoring: When To Use Each Approach? In this article, we will discuss two major monitoring approaches: Synthetic Transaction and Real User Monitoring.

 

Author Comment

by:AttilaB
ID: 40009784
Even if it is ActiveX DLL, not a C++ DLL?

Do you know of any good examples or tutorials on that?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 40009790
ActiveX is little more than a brand name. Also, the language in which is written is irrelevant.The only thing that's relevant is the binary format and its exports

I could only google, like you, for the links to tutorials
0
 

Author Closing Comment

by:AttilaB
ID: 40009809
OK. Thanks.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 40010115
:)
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question