Introduction
This article shows how to call a VC++ DLL from a Console Application in C.
Getting Started
- Create a new ATL project for a DLL , Click Finish.
- Use ATL Object Wizard to add a simple object, Short Name as mydll , accept defaults.
- Using Class View Add Method to the new interface , Method Name as
multiply
and parameters as '[in] int ifirst,[in] int isecond,[out] int* result
'.
Your method should look like this:
STDMETHODIMP Cmydll::multiply(int ifirst, int isecond, int *result)
{
// TODO: Add your implementation code here
*result = ifirst * isecond;
return S_OK;
}
Build and register the DLL. Now Create a Win32 Console Application named 'CallCDLL'.
Includes
#include <stdio.h>
#include <objbase.h>
#include "dll4C.h" //contains prototype of method
#include "dll4C_i.c" //contains the Class ID ( CLSID )
Your
Main()
should like this
int main(void)
{
IClassFactory* pclsf;
IUnknown* pUnk;
Imydll* pmydll;
int x,y;
int result;
CoInitialize(NULL);
HRESULT hr = CoGetClassObject(CLSID_mydll,CLSCTX_INPROC,NULL,
IID_IClassFactory,(void**)&pclsf);
if(!SUCCEEDED(hr))
{
printf("CoGetClassObject failed with error %x\n",hr);
return 1;
}
hr = pclsf->CreateInstance(NULL,IID_IUnknown,(void**)&pUnk);
if(!SUCCEEDED(hr))
{
printf("ClassFactory CreateInstance failed with error %x\n",hr);
return 1;
}
hr = pUnk->QueryInterface(IID_Imydll,(void**)&pmydll);
if(!SUCCEEDED(hr))
{
printf("QueryInterface failed with error %x\n",hr);
return 1;
}
printf("Input two numbers to multiply:\n");
scanf("%d\n%d",&x,&y);
pmydll->multiply(x,y,&result);
printf("The product of the two numbers %d and %d = %d\n",
x,y,result);
pmydll->Release();
pclsf->Release();
return 0;
}
Conclusion
That's it. Write to me for any explanations/suggestions.