I have the following COM object installed on one of our servers that I need to rewrite...some legacy code uses the object as follows:
Set oEmail = CreateObject("SSDSCommunicator.EmailClass")
oEmail.Send(szFrom, szRecipients, szSubject, szEmailBody, SMTPServer, szErr, "", , , , True)
I have followed the example in this answer but I'm struggling to register the COM component.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mail;
using System.Runtime.InteropServices;
namespace SSDSCommunicator
{
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("DB38A91C-9EB6-4472-9A49-40722431E096")]
public interface IEmailClass
{
void launch();
bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false);
}
[ClassInterface(ClassInterfaceType.None), Guid("A00C16DA-1791-4A3A-8D16-4765A9FAD060"), ProgId("SSDSCommunicator.EmailClass")]
public class EmailClass : IEmailClass
{
private string path = null;
public void launch()
{
Console.WriteLine("I launch scripts for a living.");
}
public bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false)
{
...
}
}
}
The project builds successfully. How do I register the dll as a COM object so that the the old VB6 code will work?
I have ticked the register for COM interop and Make the assembly COM visible in the project settings.
I've had no luck with regsvr32 (no entry point found) or regasm...
The COM object looks like this on the old server:
Edit
Should I be able to see the COM object in component services after running the regasm command?
regasm C:\...\SSDSCommunicator.dll /CodeBase
OK sweet...found the answer to this thanks to user957902 and GTG (write some answers below if you want points):
Final code below:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mail;
using System.Runtime.InteropServices;
using System.EnterpriseServices;
namespace SSDSCommunicator
{
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("DB38A91C-9EB6-4472-9A49-40722431E096")]
public interface IEmailClass
{
bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false);
}
[ClassInterface(ClassInterfaceType.None), Guid("A00C16DA-1791-4A3A-8D16-4765A9FAD060"), ProgId("SSDSCommunicator.EmailClass")]
public class EmailClass : ServicedComponent, IEmailClass
{
private string path = null;
public bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false)
{...
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With