Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 308
  • Last Modified:

How to call not a default constructor in COM Server?

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
krassiB
Asked:
krassiB
1 Solution
 
jtm111Commented:
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
 
TriskelionCommented:
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
 
AxterCommented:
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
 
krassiBAuthor Commented:
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
 
krassiBAuthor Commented:
See my previous comments
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now