我想用powershell中的相对路径导入dll。下面是我尝试导入 dll 的代码片段。
$dirpath = split-path $MyInvocation.MyCommand.Definition
$testDllPath = "$dirpath\..\Test1\Test.dll"
$signatureGet = @'
[DllImport(@"$testDllPath",EntryPoint="TestMethod",ExactSpelling=false)]
public static extern bool TestMethod([MarshalAs(UnmanagedType.LPWStr)]string args1, [MarshalAs(UnmanagedType.LPWStr)]string args2);
'@
$typeFunc = Add-Type -MemberDefinition $signatureGet -Name "TestMethod" -PassThru
$ret = $typeFunc::TestMethod($args1, $args2)
当我尝试使用硬编码路径进行相同操作时,它能够加载 dll。与相对路径相同,它不起作用。它会因格式不正确而引发错误。
请让我知道如何实现这一目标。
与 Windows 互操作时,依赖 PowerShell 中的当前目录(通过使用相对路径)是危险的。例如,如果您有时执行此操作:
[environment]::CurrentDirectory
您将看到 PowerShell 的当前目录概念并不总是与 Windows 的当前目录概念相匹配。这是因为您可以在同一个 PowerShell 进程中同时运行多个脚本,并且每个脚本都可以根据需要更改当前目录。此外,我认为 DllImportAttribute 不接受相对路径。通常只提供一个名称,然后 Windows 搜索与 exe (PowerShell.exe) 相同的目录,然后搜索 PATH 环境变量中的路径。
您可以做的是在尝试调用导入 dll 的脚本之前修改 $env:PATH 环境变量,例如:
$dirpath = split-path $MyInvocation.MyCommand.Definition
$env:PATH += ";$dirpath\..\..\Test1"
$signatureGet = @'
[DllImport(@"Test.dll",EntryPoint="TestMethod",ExactSpelling=false)]
public static extern bool TestMethod([MarshalAs(UnmanagedType.LPWStr)]string args1, [MarshalAs(UnmanagedType.LPWStr)]string args2);
'@
$typeFunc = Add-Type -MemberDefinition $signatureGet -Name "TestMethod" -PassThru
$ret = $typeFunc::TestMethod($args1, $args2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)