Solved

Call VB ActiveX dll from C language

Posted on 2004-04-06
6
577 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
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
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

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.

758 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

22 Experts available now in Live!

Get 1:1 Help Now