【发布时间】:2016-10-10 18:38:29
【问题描述】:
如何为在 COM 对象中声明的枚举创建引用以传递给需要它的方法?具体来说,第 3 方 COM 对象上有一个方法 SetHomeDir,该方法将枚举作为唯一参数。参数所期望的定义基本上是:
typedef enum
{
abFalse = 0,
abTrue = 1,
abInherited = -2
} SFTPAdvBool;
它似乎是在 COM 对象中的某个地方定义的,但不是作为我可以使用 New-Object 创建的对象。我尝试了以下方法,它们都给出了相同的MX Error: 7 响应:
$obj.SetHomeDir($true)
$obj.SetHomeDir(1)
$obj.SetHomeDir([Object]1)
$obj.SetHomeDir([Int16]1)
Exception calling "SetHomeDir" with "1" argument(s): "MX Error: 7 (00000007)"
以下是尝试其他方法的结果:
PS C:\> New-Object -ComObject SFTPCOMINTERFACELib.SFTPAdvBool
New-Object : Cannot load COM type SFTPCOMINTERFACELib.SFTPAdvBool.
PS C:\> [SFTPAdvBool]::abTrue
Unable to find type [SFTPAdvBool]:
make sure that the assembly containing this type is loaded.
PS C:\> [SFTPCOMINTERFACELib.SFTPAdvBool]::abTrue
Unable to find type [SFTPCOMINTERFACELib.SFTPAdvBool]:
make sure that the assembly containing this type is loaded.
COM 向 PowerShell 公开的方法签名如下所示:
PS C:\> $user.SetHomeDir
MemberType : Method
OverloadDefinitions : {void SetHomeDir (SFTPAdvBool)}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : void SetHomeDir (SFTPAdvBool)
Name : SetHomeDir
IsInstance : True
注意:这是在 Windows Server 2008 R2 上的 PowerShell 2.0 下运行的,但如有必要,我会考虑将 Windows Management Framework 升级到更新版本。
更新:这是来自 Visual Studio 对象浏览器的屏幕截图,以防提供任何线索。
【问题讨论】:
-
a) 试试
$obj.SetHomeDir([Int32]1)b) 您使用的是 32 位还是 64 位 powershell?如果 64 尝试 32 位。 -
不要认为它适用于字符串名称,是吗?
"abTrue" -
尝试字符串名称的好主意 - 但不,它会反弹
Type Mismatch
标签: powershell enums com