Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use COM dll in my C++ program

Tags:

c++

dll

com

I wish to use a COM dll in my C++ library. The way I figured going about it, is to #import the dll's .tlb file, which I did :

#import "mycom.tlb" no_namespace

The problem is , I don't quite know where to place this declaration. should it be inside the H file or the CPP file? or maybe the stdafx.h file? I tried placing it in the .cpp file , just for testing.

in the H file I have this member declared :

ILogicSecuredPtr m_pbLogic;

(where ILogicSecured is the interface I want to work with in my COM dll)

Then I added this in the constructor to instantiate the interface :

CoInitialize(NULL);
m_pbLogic(__uuidof(LogicSecured)); 

(where LogicSecured is the name of the object that implements the interface)

In the destructor I added :

CoUninitialize();

This won't compile however, no matter where I try to place the #import declaration. it just doesn't recognize the ILogicSecured object. I get this error in the H file :

Error   2   error C2146: syntax error : missing ';' before identifier 'm_pbLogic'

I should also mention that when I F12 (in Visual Studio) on the ILogicSecuredPtr declaration, it takes me to the tlh file just fine. So I know it recognizes it.

What am I doing wrong here?

Thanks alot. Roey

like image 368
Roey Avatar asked Mar 04 '10 07:03

Roey


People also ask

What is DLL in C programming?

A DLL is a library that contains code and data that can be used by more than one program at the same time. For example, in Windows operating systems, the Comdlg32 DLL performs common dialog box related functions. Each program can use the functionality that is contained in this DLL to implement an Open dialog box.

How do I run a DLL file?

Open the folder with the DLL file. Once you find the folder, hold the Shift key and right-click the folder to open the command prompt directly in that folder. Type "regsvr32 [DLL name]. dll" and press Enter.


2 Answers

The problem is that when the compiler parses the .h file it has not seen the #import yet. Since your project is small your best bet is to put #import into stdafx.h.

When you press F12 Visual Studio uses Intellisence database information that is formed parsing all the sources in order that might be different from the compilation order. So it's quite typical to have Intellisence know where something is declared and the compiler to not compile it at the same time.

like image 107
sharptooth Avatar answered Sep 30 '22 07:09

sharptooth


What happens if you import a dll or tlb file is that the preprocessor generates a tlh and a tli file. If the tlb is stable you could also generate the two files and include the tlh header as if its a normal header.

So the answer is put the #import where you would put the header because it is converted into an include of the tlh file.

I use it in the following way to make myself independent of the location of the MSADO15.dll and added the tlh file to my subversion.

#ifndef __ADO__H
#define __ADO__H

#ifdef REBUILD_ADO_HEADER
#import "C:\Programme\Gemeinsame Dateien\system\ado\MSADO15.DLL" rename_namespace("MyAdoNamespace") rename("EOF","EndOfFile")
#else // REBUILD_ADO_HEADER
#include "MSADO15.tlh"
#endif // REBUILD_ADO_HEADER

// Define ADO Namespace as global
using namespace MyAdoNamespace;

#endif // __ADO__H
like image 41
Totonga Avatar answered Sep 30 '22 08:09

Totonga