[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

Call VB ActiveX dll from C language

Posted on 2004-04-06
6
Medium Priority
?
590 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 1000 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

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…
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 how to use strings and some functions related to them in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.
Suggested Courses

873 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