從我們的某個硬件供應商處理最近獲得的dll(用於.NET sdk中的工作)。他們提供了所有的類,方法等體面的文檔,但他們的所有例子都在C#中。我不熟悉C#,並且正在將所有內容翻譯成PowerShell。我已經取得了一些進展,但遇到了困難,我正在尋求一些幫助。將第三方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'上的研究並沒有給我任何我可以消化的東西。
好的,夠公平的。回想起來,我認爲要求「轉換」是誇大了需求。我真正需要的是能夠與這個API進行交互,而無需掌握其他語言。是否可以包裝PoSh代碼中現有的C#代碼?或者是花時間學習C#的唯一實用解決方案? – 2013-02-28 07:21:06
如果您只需調用API,那麼您可能可以通過PowerShell執行此操作。不要擔心Dotfuscator,因爲它應該只使用非公共類型和類型成員的名稱。順便說一句,你應該能夠通過類型名稱來更新對象,例如new-object'<完全限定類型名稱here>'-arg <構造器數組arg-here>。 – 2013-02-28 18:14:08
所以,「如果你只需要調用API,那麼你可能會從PowerShell做到這一點」,呃?你能指點我一個資源嗎?這個資源會給我用來做這些事情的原則嗎?我知道每個API的構建都是不同的,但我想有些特定的「鉤子」對於任何基於.NET的api都很常見。 – 2013-02-28 21:37:26