Solved

How to call VB activex DLL in MFC

Posted on 2002-04-28
2
268 Views
Last Modified: 2013-11-20
Hi all
  i am Vb programmer and i wanted to know how to call vb dll in vc++ as my collegue is working as vc++ programmeer and he wants to integrate my dll with his program in his project .

can any body give me a good example for that

thanks

asps
0
Comment
Question by:asps
2 Comments
 
LVL 14

Accepted Solution

by:
sudhakar_koundinya earned 275 total points
ID: 6974791
Hi

i got this information from one site and the author for this is Milind S Deobhankar

May this article helps you



How to call VB dll from VC++
In this article I'll present a way of calling a VB ActiveX DLL from a MFC client application. There are other ways to do so but I find this by far the easiest. Any information presented here is only for learning purposes.
I shall briefly point out the steps you need to follow-
·     Create an ActiveX server component with VB. This is the ActiveX DLL you need to create with VB.
·     Create an dialog based MFC application using the MFC Appwizard.
·     Import the server's (DLL) type library into the MFC client app.
·     Initialize the COM library
·     Retrieve the CLSID of the server component.
·     Create an instance of the COM server component.
·     Use the COM object
·     Uninitialize the COM library
First create a new ActiveX DLL project using VB 6.0. Name the project prjdll and the class clsdll. Add a new function fnCallDll to the class. My function just displays a messagebox and looks like
Public Function fnCallDll()
     MsgBox "VB ActiveX DLL"
End Function
Save and compile this project to create prjdll.dll. This is our server component.
Now we are going to develop the client. Create a new dialog based application in VC++ using MFC Appwizard and save the project.
We are going to import the server component's type library using the #import statement. Copy the prjdll.dll file to the directory where you have saved your MFC Appwizard project. Click the FileView tab of the Project Workspace window, expand the Header Files folder, open the file stdafx.h and add the following code (appears greyed)
# import "prjdll.dll"
using namespace prjdll;
You must add the above code after
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately  
and before
#endif
in the stdafx.h file.Importing the prjdll.dll file helps the compiler to link to the dll's type library at runtime. The #import tells the compiler to generate the wrapper class, which will encapsulate the functionalities of the server component. If the server component is created using VB we need the import the associated .dll file and if the component is created using VC++, we need to import the .tlb file.The name of the wrapper class will be same as the server component name, by default.
Compile the stdafx.cpp file. The compiler generates a .tlh and a .tli file in your projects Debug or Release directory (depending on your configuration). These are the type library header and implementation files. Open the .tlh file by double-clicking it and find out word immediately after the word namespace. This is usually the name of the project that we earlier created using VB.Look at the code we inserted earlier to the stdafx.h file.The using namespace is required so that we can access the server's methods.
Place a codebutton control (IDC_BUTTON1) on the dialog. Double-click the control to add a command handler OnButton1() for the button. Now add the following code in the handler-
HRESULT hresult;
CLSID clsid;

CoInitialize(NULL);     //initialize COM library
hresult=CLSIDFromProgID(OLESTR("prjdll.clsdll"), &clsid);    //retrieve CLSID of component
         
_clsdll *t;
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_clsdll),(LPVOID *) &t);
if(FAILED(hresult))
{
     AfxMessageBox("Creation Failed");
     return;
}

t->fnCallDll ();  //call method
t->Release();   //call method
CoUninitialize();  //Unintialize the COM library        
The name of the CoClass is _clsdll. The CoCreateInstance function returns the address of the interface pointer requested. Now the pointer t can happily be used to access the functionality of the server component.
That's it. On clicking the button a Messagebox should pop up.




Cheers
Koundinya
0
 

Author Comment

by:asps
ID: 6980777
as there are no comments or answers from others and i am accepting his answer as his idea is working fine.

Thanks
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
sameEnds challenge 3 133
Creating an alias to a directory so I can change the directory 'contents' by changing the alias 5 84
java ^ examples 8 62
FizzBuzz challenge 9 76
Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
Introduction: Dialogs (1) modal - maintaining the database. Continuing from the ninth article about sudoku.   You might have heard of modal and modeless dialogs.  Here with this Sudoku application will we use one of each type: a modal dialog …
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

930 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

12 Experts available now in Live!

Get 1:1 Help Now