0
我創建了一個簡單的C#dll並使用RegAsm.exe
進行了註冊。一個非常簡單的方法是不帶參數調用並返回一個數字,這裏是一個簡化版本。創建C#dll並使用powershell的方法
namespace AVL_test {
interface ITestClass {
int GetNumber();
}
[ComVisible(true)]
public class TestClass: ITestClass {
public TestClass() { }
public int GetNumber() {
return 10;
}
}
}
我需要調用從Powershell的那個方法,所以我增加了類型
Add-Type -Path "C:\myPath\AVL_test.dll"
這似乎如果我[AVL_test.TestClass]
我得到這個輸出
IsPublic IsSerial名稱是因爲加載BaseType
-------- -------- ---- --------
True False TestClass System.Object
但如果我嘗試通過鍵入[AVL_test.TestClass]::GetNumber()
調用GetNumber()
我得到這個錯誤
方法調用失敗,因爲[AVL_test.TestClass]不包含名爲法「GetNumber」。
我做錯了什麼?
有沒有實現靜態方法,如果我指定接口的方法嗎?如果我嘗試將方法更改爲'public static int GetNumber()'我得到一個錯誤,說'AVL_test.TestClass.GetNumber()'無法實現接口成員,因爲它是靜態的' – Naigel
不,如果有一個接口你的例子,比方法不能聲明爲靜態... – Markus
在相關說明,我不認爲'[ComVisible]'屬性是PowerShell交互所必需的。如果您將程序集註冊爲COM對象,則只需要此方法,但PowerShell將本機加載.NET類型和程序集。 – PeterK