Solved

How to call not a default constructor in COM Server?

Posted on 2001-09-14
5
236 Views
Last Modified: 2013-11-25
Hi Guys,
I have a COM server, written in C++ using ATL in VStudio.
I have another class (in separate DLL) that I am using from COM DLL. The other class has two constructors: one the default and the other with one parameter.
ATL Wizard generates just one constructor for the class implementing COM.
I am creating a object from VB client with CreateObject function, but this function does not accept parameters as in C++ (so I can pass my parameter and initalize the second constructor).
Thanks for the help,
Krassi
0
Comment
Question by:krassiB
5 Comments
 
LVL 3

Accepted Solution

by:
jtm111 earned 200 total points
ID: 6484127
I am not an expert in ATL COM, but I have come upon the same problem.

Can't you just use the default constructor for purposes of CoCreateInstance (it doesn't even have to do anything other than create an instance of your interface), but define a method X for your interface that takes VARIANT, BSTR, arguments, etc, and have method X call your class constructor with arguments?


Maybe I misunderstand your problem.
0
 
LVL 6

Expert Comment

by:Triskelion
ID: 6484130
What if you made your own constructor to override the default constructor or the constructor with the parameter?

Can you sub-class the class and give the constructor a default parameter?

This assumes you are doing some C++ compiling.

0
 
LVL 30

Expert Comment

by:Axter
ID: 6484152
Are you creating the object in the VB side, or the VC++ side?

Can you show some of your code?

Can you post the declaration for your class?
0
 

Author Comment

by:krassiB
ID: 6484178
jtm111,
you understood very well my question.
And this is what I did. And it works.
You deserve to receive the points.
I was thinking may be there is more sofisiticated
way to solve the problem.

Triskelion,
what do you mean to create my own constructor?
Please explain.

Axter,
I am instantiating the object in VB side (this is the client). I have also C++ class library, which I have done.
The task is to wrap it up for use with COM (for easy use from VB). So I started to implement the COM interfaces in C++ using ATL.
In my original library let say I have class
SampleClass, wich has default constructor SampleClass()
and the second one SampleClass(int x).
When I create ATL Class implementing COM interface it has just default constructor (created by the Wizard), which is invoked by CreateObject function in VB, which is used for instanciating COM object. The problem is that you can not pass to CreateObject more parameters, needed for the other constructor (in my case just one). That is way as per jtm111 suggestion you need to create another interface method with one parameter. If you have more constructors you should implement as many such methods as constructors you have in the original one.

If somebody has any other idea, please let me know.
Thanks for your time and help!

Krassi
0
 

Author Comment

by:krassiB
ID: 6484276
See my previous comments
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

For a while now I'v been searching for a circular progress control, much like the one you get when first starting your Silverlight application. I found a couple that were written in WPF and there were a few written in Silverlight, but all appeared o…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

760 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

19 Experts available now in Live!

Get 1:1 Help Now