1

ハードウェアベンダーの1つから最近取得したdll(.NET SDKで作業するため)を使用する。彼らはすべてのクラス、メソッドなどを備えたまともなドキュメントを提供しています。しかし、それらの例はすべてC#です。私はC#に精通しておらず、すべてをPowerShellに変換する作業を行っています。私はある程度の進歩を遂げましたが、壁にぶつかり、助けを求めています。

C#での例を次に示します。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Vendor.Components.Flashlight.Sdk.Examples
    {
        class MyApp
        {
            public void Execute()
            {
                var device = new FlashlightController();
                device.Light(FlashlightColor.Green);
            }
        }
    }

これまでのところ、PowerShellを使用している場所は次のとおりです(より雄弁な方法がある場合は、遠慮なくお知らせください)。

    ## Vendor DLL path
    $assemblyFlashlight = 'C:\FlashlightDLL\Flashlight.Sdk.dll'
    ## Adding new assembly as a Type and listing members
    $typeFlashLight = Add-Type -Path $assemblyFlashlight -PassThru
    $typeFlashlight

    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     False    DotfuscatorAttribute                     System.Attribute
    True     False    BusylightController                      System.Object
    True     True     BusylightSoundClip                       System.Enum
    True     True     BusylightVolume                          System.Enum
    True     False    BusylightColor                           System.Object
    False    False    b                                        System.Object
    False    False    c                                        System.Object
    False    False    e                                        System.Object
    False    False    f                                        System.Object
    False    False    d                                        System.Object
    False    False    i                                        System.ValueType
    False    False    a                                        System.ValueType
    False    False    g                                        System.Object
    False    False    h                                        System.ValueType
    False    True     d                                        System.MulticastDelegate
    False    False    b                                        System.ValueType
    False    False    e                                        System.Object
    False    False    c                                        System.Object
    False    False    f                                        System.Object
    False    False    a                                        d
    False    False    a                                        System.Object


    ## Creating objects
    $objController = New-Object $typeFlashLight[1]
    $objSoundClip = New-Object $typeFlashLight[2]
    $objVolume = New-Object $typeFlashLight[3]
    $objColor = New-Object $typeFlashLight[4]

上記のPowerShellコードはエラーなしで実行され、すべての$obj変数には予期されるメンバーが含まれています。

    $objColor|Get-Member

    Name          MemberType Definition
    ----          ---------- ----------
    Equals        Method     bool Equals(System.Object obj)
    GetHashCode   Method     int GetHashCode()
    GetType       Method     type GetType()
    ToString      Method     string ToString()
    BlueRgbValue  Property   int BlueRgbValue {get;set;}
    GreenRgbValue Property   int GreenRgbValue {get;set;}
    RedRgbValue   Property   int RedRgbValue {get;set;}

ですから、私は正しい方向に進んでいると思います。しかし、「IsPublic」、「IsSerial」などの特定のものを翻訳する方法がわかりません。また、「Dotfuscator」に関する調査では、消化できるものは何も得られませんでした。

4

1 に答える 1

2

IsPublicとIsSerialは、実装するプロパティではありません。これらはSystem.RuntimeTypeのプロパティであり、.NETのすべてのタイプに関連付けられています。これを試して:

$objColor.GetType()

C#からPowerShellへの変換に関しては、常に100%のマッピングがあるとは限らないことに注意してください。つまり、PowerShellでは、別のタイプから派生したタイプよりもはるかに少ないクラスまたはインターフェイスを作成することはできません。CLIで言えば、PowerShellはプロデューサー言語というよりもコンシューマー言語です。ほとんどの場合、これは基本的なユーティリティライブラリでは問題になりません。ただし、そのライブラリが実際に基本クラスまたはインターフェイスから継承する必要があるフレームワークである場合は、PowerShellを使用できません。

于 2013-02-28T00:17:42.553 に答える