Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

A Simple C# DLL - how do I call it from Excel, Access, VBA, VB6?

I have a simple class library written in c#.

using System; namespace TestDll {     public class Test     {         public string HelloWorld         {             get             {                 return "Hello World";             }         }     } } 

My question is how can I call this HelloWorld function from Microsoft Office Visual Basic (which I think is VB6)?

My first step was to add the DLL as a reference - but on browsing and selecting the compiled DLL the message "Can't add a reference to the specified file." was thrown.

Can anyone point me in the right direction as to why/how to get this working?

Thanks in advance SO!

like image 710
divinci Avatar asked Jul 23 '09 10:07

divinci


People also ask

What is a simple C program?

Simple C ProgramsHello World Program in C. C program to check whether the given number is positive or negative. Reverse an input number using recursion. Program to find greatest of three numbers. C Program to print Fibonacci series in a given range.

What is %d in C programming?

In C programming language, %d and %i are format specifiers as where %d specifies the type of variable as decimal and %i specifies the type as integer. In usage terms, there is no difference in printf() function output while printing a number using %d or %i but using scanf the difference occurs.


1 Answers

You can't access a static member via COM interop. In fact your code doesn't even compile, the method should be in a class. Here is how you can do it:

[InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("01A31113-9353-44cc-A1F4-C6F1210E4B30")]  //Allocate your own GUID public interface _Test {     string HelloWorld { get; } }  [ClassInterface(ClassInterfaceType.None)] [Guid("E2F07CD4-CE73-4102-B35D-119362624C47")]  //Allocate your own GUID [ProgId("TestDll.Test")] public class Test : _Test {     public string HelloWorld { get { return "Hello, World! "; } } } 

The project properties Build tab, select Register for COM interop. So you can see the results quickly. To install the dll on another machine you need to use regasm.

To then consume this:

Dim o : Set o = CreateObject("TestDll.Test") MsgBox o.HelloWorld 

You can also reference the dll and use early binding:

Dim o As TestDll.Test Set o = New TestDll.Text MsgBox o.HelloWorld 
like image 88
AnthonyWJones Avatar answered Sep 22 '22 15:09

AnthonyWJones