我创建了一个简单的C#dll并使用RegAsm.exe
注册了它。一个非常简单的方法是在没有参数的情况下调用并返回一个数字,这里是一个简化版本。
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 Name BaseType
-------- -------- ---- --------
True False TestClass System.Object
但如果我尝试通过输入GetNumber()
来调用[AVL_test.TestClass]::GetNumber()
,我会收到此错误
方法调用失败,因为[AVL_test.TestClass]不包含名为' GetNumber'的方法。
我做错了吗?
答案 0 :(得分:7)
您的方法应为static
,或者您需要创建该类型的实例(TestClass)。
最后可以使用
完成New-Object -TypeName <full qualified type name> -ArgumentList <args>
或者在您的具体案例中:
$test = New-Object -TypeName AVL_Test.TestClass
$test.GetNumber()