Search code examples
c#.netdelphimanaged-code

Call C# dll from Delphi


I composed .Net 3.5 dll with single method, which is to be called by Delphi .exe. Unfortunately it does not work.

The steps: 1. Create C# 3.5 dll with the code:

public class MyDllClass
{
    public static int MyDllMethod(int i)
    {
        MessageBox.Show("The number is " + i.ToString());
    }
}
  1. Go to Assembly Properties --> Assembly Information and checked the "Make Assembly COM-Visible"
  2. Used RegAsm.exe to register my dll

This throws Delphi exception which indicates it cannot connect the dll. What are the steps required to enabled usage of C# managed dll from unmanaged code.

Does any one familiar with good example about the subject?

Thank you


Solution

  • After massive investigation I found the solution: it's all about registration parameters. The flag /codebase must be added to the regasm command.

    Many posts out there suggest to use Guid and other COM attributes on the C# Com exposed object, I managed to deliver COM functionality using the ComVisible(true) attribute and regasm /tlb /codebse command.

    The code:

    [Guid("7DEE7A79-C1C6-41E0-9989-582D97E0D9F2")]
    [ComVisible(true)]
    public class ServicesTester
    {
        public ServicesTester()
        {
        }
    
        //[ComVisible(true)]
        public void TestMethod()
        {
            MessageBox.Show("You are in TestMEthod Function");
        }
    }
    

    and as I mentioned I used regasm.exe /tlb /codebase to register it