Welcome to MSDN Blogs Sign in | Join | Help

Mark Schmidt's Abode

On Programming, Writing, Gaming, Fitness, Life

News

  • Have a Question?

    Click here to chat with me

    XBox Live GamerTag


    Twitter



    The Mark Cam


    My MoBlog

    www.flickr.com
    This is a Flickr badge showing public photos from codepunk. Make your own badge here.

    Community-Credit

Interop with Internet Explorer

I find that one of the best ways to learn something new is to not fire up a search engine and start reading what other people have done but to do it yourself. Someone asked me yesterday how you would go about calling a .NET assembly from client side JScript in Internet Explorer (handy if you're using HTML based UI's). Now I've done plenty of COM calls from JScript using C++ and converting that to C# is easy as long as you follow a few simple steps. Here are those steps (with a link to the project)

1. Create your assembly (I use a .NET class library) keeping COM Interop best practices in mind. This includes:

  • Avoid using parameterized constructors.
  • Avoid using static methods.
  • Define event-source interfaces in managed code.
  • Include HRESULTs in user-defined exceptions.
  • Supply Globally Unique Identifiers (GUIDs) for types that require them (using the GUID attribute)
  • Expect inheritance differences.

2. Create a post build event to call regasm.exe passing the assembly name as the command line argument (see sample project).

3. Create an HTML page that creates the .NET type similar to the following:

function CallOutToCSharpAssembly()
{
var myAssembly = new ActiveXObject( "IEToCSharp.IEInterop" );
alert( asm.HelloWorld );
}

Note that the progid for your assembly is of the form namespace.classname. You can change this by applying the ProgId attribute to your type.

4. Build your .NET assembly and open your HTML page in IE. You should receive ActiveX warnings since your COM object is not marked safe for scripting. In cases like this, I now punt to the search engines.

Click here to download the sample project.

So, this is overly simplistic but should be a good starting point to anyone wanting to interop with IE without resorting to unmanaged C++ code.

Posted: Tuesday, October 26, 2004 11:04 AM by markhsch
Filed under:
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker