You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell反射调用测试DLL静态void函数的参数传递报错问题

错误原因

  • 程序集加载逻辑错误:你使用的[System.Reflection.Assembly]::Load方法接收的入参是程序集原始字节数组,而非本地文件路径,加载本地DLL请使用LoadFrom方法;同时你第一行代码存在语法笔误,字符串首尾引号不匹配。
  • 反射调用参数格式错误:MethodInfo.Invoke的第二个入参要求为object[]类型的参数数组,即使目标方法仅需1个参数,也必须将参数封装为数组传入。你直接传入字符串会被识别为参数数量不匹配,传入$null时方法拿到的参数为空,所以进程启动失败静默退出。

修正后可运行代码

# 加载DLL文件,改用LoadFrom方法
$assem = [System.Reflection.Assembly]::LoadFrom("C:\temp\mytestlib.dll")
$class = $assem.GetType("ExampleProject.Class1")
$method = $class.GetMethod("RunProcess")
$fullName = "C:\\Windows\\System32\\calc.exe"
# 参数必须包裹为object数组
$method.Invoke($null, @($fullName))

可选实现说明

如果你确实需要使用Load方法加载程序集,需要先读取DLL的字节内容再传入,示例如下:

$dllBytes = [System.IO.File]::ReadAllBytes("C:\temp\mytestlib.dll")
$assem = [System.Reflection.Assembly]::Load($dllBytes)
# 后续获取类型、调用方法的逻辑和上述代码一致

内容的提问来源于stack exchange,提问作者Psymon25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:06:02