Solved

Call VB ActiveX dll from C language

Posted on 2004-04-06
6
581 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
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
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

Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
stack 22 166
c language help - file paths 7 147
How to copy documents folder to network folder automatically as backup? 15 87
Raspberry Pi 3 to send text message 9 116
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Examines three attack vectors, specifically, the different types of malware used in malicious attacks, web application attacks, and finally, network based attacks.  Concludes by examining the means of securing and protecting critical systems and inf…
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.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

831 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