2

I'm trying to use the HTML Tidy .NET wrapper in PowerShell 2.0.

Here is a working example using C# (TestIt.cs included in the wrapper distribution):

using Tidy;
Document tdoc = new Document();

I'm doing this in PowerShell:

[Reflection.Assembly]::LoadFile("C:\Users\e-t172\Desktop\Tidy.NET\Tidy.dll")
New-Object Tidy.Document

I get the following error:

New-Object : Constructor not found. Cannot find an appropriate constructor for type Tidy.Document.
At line:1 char:11
+ New-Object <<<<  Tidy.Document
    + CategoryInfo          : ObjectNotFound: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand

Additional info:

> [Reflection.Assembly]::LoadFile("C:\Users\e-t172\Desktop\Tidy.NET\Tidy.dll").getTypes()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    ITidyDocumentEvents
True     True     TidyReportLevel                          System.Enum
True     True     __MIDL_ITidyDocument_0008                System.Enum
True     False    DocumentClass                            System.__ComObject
True     False    ITidyDocumentEvents_Event
True     True     ITidyDocumentEvents_OnMessageEventHan... System.MulticastDelegate
True     False    Document
True     False    ITidyDocument
True     True     TidyOptionId                             System.Enum
True     True     __MIDL_ITidyDocument_0002                System.Enum
False    False    ITidyDocumentEvents_SinkHelper           System.Object
False    False    ITidyDocumentEvents_EventProvider        System.Object

What's going on?

1 Answer 1

6

Try creating the document using the DocumentClass type e.g.:

$doc = new-object tidy.documentclass

C# does some magic when using interop assemblies and IIRC one of those is to take a class spec of "Foo" and in turn create an instance of "FooClass".

Sign up to request clarification or add additional context in comments.

1 Comment

At first I thought this didn't work... then I realized I was trying to load a 32-bit DLL into a 64-bit Powershell session... I switched to a 32-bit PowerShell session and it works!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.