Solved

Trying to register a C# DLL as a COM object

Posted on 2006-07-19
3
227 Views
Last Modified: 2006-11-18
First off...much luck on the explanation that solves my problem. However, I know it is somehow possible. Anyway, I have the need to expose some C# objects to an application that works with COM objects. (QuickTest Professional to be exact). We have a lot of tests written in C#...and we want to avoid a rewrite to integrate them with Mercury. So...I have done this sample example that is very simple: Here it is:

Example (C#): Creating a Simple .NET Component
1.      Create a new ClassLibrary project called TestComponent.
2.      Add the following class to the project:
public class Class1
{
            public Class1()
            {
            }
            public int Sum(int num1, int num2)
            {
                  return num1 + num2;
            }
}
3.      In the project settings set the Register for COM Interop option to True
4.      Build the project.
5.      By default, the component ProgID is the <Project Name>.<ClassName>.
6.      In QuickTest, use this code to access the Class1 Sum method.
' Create a TestComponent.Class1 instance
Set oTestCom = CreateObject("TestComponent.Class1")
MsgBox oTestCom.Sum(5,7) 'opens a MessageBox with the number 12


I can tell you for a fact...it is far from that simple. Apparantly...my issue is with getting this DLL exposed for COM. For the love of everything good...how do I do that? My neck is hurting..my ego has been beaten into submission. HELP PLEASE! Thank you for any submissions.
0
Comment
Question by:SGyves
  • 2
3 Comments
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 17139708
The prog ID for a COM component is really Namespace.Class, not Project.Class.  It just happens that project name and namespace are the same by default.

You can control the ProgID of a class with the ProgID attribute:

[ProgID("TestComponent.Class1")]

Bob
0
 

Author Comment

by:SGyves
ID: 17140814
Compiler is not liking that statement. Do I need a specific "using" statement for that?
0
 

Author Comment

by:SGyves
ID: 17140825
Hey...but I used namespace.class....AND IT WORKED....headache gone. Thanks
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Summary: Persistence is the capability of an application to store the state of objects and recover it when necessary. This article compares the two common types of serialization in aspects of data access, readability, and runtime cost. A ready-to…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

730 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