Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re^2: Access .net object from PERL

by jimbojones (Friar)
on Apr 26, 2006 at 16:04 UTC ( #545818=note: print w/replies, xml ) Need Help??

in reply to Re: Access .net object from PERL
in thread Access .net object from PERL


As a follow-up to the above, here's how you can wrapper .NET code and expose it to COM, making it available to Perl. The following example wrappers the .NET System.Console.Write and System.Console.WriteLine methods.

First, the .NET wrapper in C#. This is for .NET 2005
using System; using System.Runtime.InteropServices; // visible to COM using System.Collections.Generic; using System.Text; namespace WrapConsole { // directive to tell COM to see this. [ComVisible(true)] /* interface that our class will implement. Some examples use lead +ing "_", some use "I" * eg _WrapConsole or IWrapConsole */ public interface _WrapConsole { // items to return [DispId(1)] void WriteLine( string line); [DispId(2)] void Write( string line); } [ComVisible(true), ClassInterface(ClassInterfaceType.None), ProgId("WrapConsole")] // our class implements the interface defined above (after the ":" +) public class WrapConsole : _WrapConsole { // COM needs a parameter-less constructor public WrapConsole() { } // method to call WriteLine; [ComVisible(true)] public void WriteLine(string line) { System.Console.WriteLine(line); } // method to call Write; [ComVisible(true)] public void Write(string line) { System.Console.Write(line); } } }
At build time, through the VS 2005 IDE, check "Register for COM interop" in the Project Properties/Build section. From the commandline, you'd have to run 'regasm' to register the assembly into the Registry.

Next, the Perl code

use Win32::OLE; my $wc = Win32::OLE->new('WrapConsole') or die "oops\n"; $wc->WriteLine( 'this is a test, should have a new line'); $wc->Write( 'this should not have a new line '); $wc->Write( "This should follow immediately, with a new line\n");
Output is
>perl this is a test, should have a new line this should not have a new line This should follow immediately, with a + new line
HTH, j

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://545818]
and God said, "Let Newton be!"...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2017-07-21 03:23 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (318 votes). Check out past polls.