Solved

Call VB ActiveX dll from C language

Posted on 2004-04-06
6
579 Views
Last Modified: 2012-06-22
The scenario is simple - a screen displays a list of data. Click an item on the list to display an scanned image. A document id is passed to determine which image to display. IBM imaging software displays the image.

Problem is: IBM imaging software uses ActiveX VB dll to display image and screen is written in J. D. Edwards which is a low level C language, so I must call the VB dll from C language. I'm using MS Studio 6. I wonder if this is possible?????

I have the following so far. When I click the screen, it goes through the program and does nothing. I have tried to debug this by adding some dll's into the Program Settings with no success. A window pops up showing the Disassembly, breakpoints are not recognized and I can't display any field values.

Any help is very much appreciated ... Jim

// code from header

#include <windows.h>
typedef (*PFNJDE2CM)( LPCSTR ); // VB dll to call receives one string parm

#ifndef DATASTRUCTURE_D550413M
#define DATASTRUCTURE_D550413M

typedef struct tagDSD550413M
{
  char              szDOCNAME[9];      // string parm is passed into this header
} DSD550413M, *LPDSD550413M;  // and stored in this struct

#define IDERRszDOCNAME_2                          1L

#endif

......
// code from .c
#define B550413M_c
#include <B550413M.h>   // this is header above

{
   int nResult = 0;
   PFNJDE2CM lpJDE2CM;
   HINSTANCE hLibrary;

   hLibrary = LoadLibrary("c:\\JDE2CM.dll.dll"); // this is VB dll

   if(hLibrary != NULL)
   {
        // gets the address of the function inside the VB dll
        lpJDE2CM = (PFNJDE2CM) GetProcAddress (hLibrary, "DllGetClassObject");

            if(!lpJDE2CM)
      FreeLibrary(hLibrary);
            else
           {
               // call the VB dll function
                const char *docid = 0;          
      docid = lpDS->szDOCNAME;    
      nResult = lpJDE2CM(docid);    
           }
}

   return (ER_SUCCESS);
}

0
Comment
Question by:jimjung27
  • 4
6 Comments
 
LVL 9

Accepted Solution

by:
ankuratvb earned 250 total points
ID: 10766292
0
 
LVL 5

Expert Comment

by:Droby10
ID: 10766343
i've never done this, but i would suggest maybe disassembling a vb written exe that makes use of the same dll.  the reason being i bet there is a bootstrap of sorts that centers around the msvbxxx.dll runtime, and _perhaps_ even plays a role in providing a layer of com dispatching.  i'm not certain of either of those things, but they sound logical at the surface level.

0
 
LVL 9

Expert Comment

by:ankuratvb
ID: 10766412
0
ScreenConnect 6.0 Free Trial

Check out the updates in one game-changing release, ScreenConnect 6.0, based on partner feedback. New features include a redesigned UI that improves session organization and overall user experience. See the enhancements for yourself!

 
LVL 9

Expert Comment

by:ankuratvb
ID: 10766422
Just do a google on 'call vb activex dll c language' in google groups.

U'll get plenty of similar links.
0
 

Author Comment

by:jimjung27
ID: 10777626
I'm still alive but dying to get rid of the 250 points...

I've written 2 cpp wrappers using some of the info from the links - thanks for the tip.

One of them disassembles the VB code and one imports the VB code. One is an exe and one is a dll.

They both only compile if an unsigned short** datatype is passed to the VB function, but the function actually receives a string (coded in the VB function). Why is this?

The only other problem I have is I get a link error:

LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library

When I try to go into the MS Studio Project Settings, the Link tab is missing??? I think this may be because of the J.D.Edwards not accepting any of the cpp code or settings. Id their a manual way to run the link from DOS?
0
 
LVL 9

Expert Comment

by:ankuratvb
ID: 10780185
See this:

http://www-unix.mcs.anl.gov/mpi/mpich/docs/mpichntman/node10.htm

It shows how to compile in VC++ from the command line.
It should solve ur problem.

U can explicitly call the link.exe and give the /NODEFAULTLIB option there.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
C Language combined operators 28 106
C++ finding a sting in a char* string from a text file 3 99
Resolve Dependency Issues 4 47
outlook office 365 8 84
An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.

867 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now