?
Solved

Trying to register a C# DLL as a COM object

Posted on 2006-07-19
3
Medium Priority
?
230 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 96

Accepted Solution

by:
Bob Learned earned 2000 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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

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

Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

649 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