Solved

Trying to register a C# DLL as a COM object

Posted on 2006-07-19
3
226 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

Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

Question has a verified solution.

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

It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

831 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