Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / Interop / July 2004

Tip: Looking for answers? Try searching our database.

ActiveX and C# Interop

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Craig - 01 Jul 2004 09:12 GMT
I am having problems getting an ActiveX DLL written in VB6 to call a
method in a C# class library component.

My C# DLL is called CSharpProject.dll and contains a public class
called CSharpClass. In this class is a single public method that
returns the string "Hello

from C sharp".

My VB6 ActiveX DLL references the C# DLL (CSharpProject.dll) using the
type library CSharpProject.tlb. The ActiveX DLL contains two methods,
the first just

returns a string declared within the method, and the second tries to
call the method defined in the C# component.

I then have a simple ASP.Net webform (Webform1.aspx) that creates an
instance of the ActiveX object using client side Javascript.

Everything works fine on my local machine but when I try using it on
another machine I get the following error(s):

1) "File or assembly name CSharpProject, or one of its dependancies,
was not found"

I have tried the following things to resolve the problem:

C# Component:

* I have created the tlb file for the CSharpProject.dll

    1) automatically using the setting in Visual Studio "Register for COM
Interop" set to true.
    2) using the .net tool tlbexp
    3) using regasm /tlb option

    (I have also ensured that the .tlb file is registered on other
machines using a tool called Reggie.exe.)

* I have tried creating a strong name for the component and
registering it in the GAC but this doesn't solve the problem.

VB6 ActiveX DLL:

* I have referenced the tlb as per a normal reference.

The code is as follows:

Public Function method1() As String
On Error GoTo fail
 foo = "dave"
 Exit Function
fail:
 foo = "Error in foo occurred in VB ActiveX DLL (" & Err.Description
& ")"
End Function

Public Function method2() As String
On Error GoTo fail
 Dim objCSharp As New CSharpProject.CSharpClass
 Dim tmp As String
 tmp = objCSharp.foo()
 method2 = tmp
 Exit Function
fail:
 method2 = "Error occurred in VB ActiveX DLL (" & Err.Description &
")"
End Function

NOte: I have also tried using the following code to declare and
instantiate the C# class -

 Dim objCSharp
 Set objCSharp = CreateObject("CSharpProject.CSharpClass")

However this returns the following error message from the VB6 ActiveX
DLL: "Object doesn't support this property or method."

Javascript:

var obj = new ActiveXObject("VBActiveXDLL.VBClass1");
alert(obj.method1());
alert(obj.method2());

All works fine on my local machine but when I copy/register/install
all the components on another machine (which has Visual Studio.Net and
v6 installed) it

doesn't work.

Any suggestions, comments, or ideas would be much appreciated

Thanks

Craig
Jimmy - 27 Jul 2004 10:08 GMT
have you registered your c# Com dll using regasm.exe on the new machine?

> I am having problems getting an ActiveX DLL written in VB6 to call a
> method in a C# class library component.
[quoted text clipped - 91 lines]
>
> Craig

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.