如果想要使用 PowerShell 调用 DLL 中的函数,需要借助一点 C# 的力量。

P/Invoke (平台调用)

具体介绍可以看微软的文档

以 libgit2 为例

需要注意的是,没办法直接从 PowerShell 脚本传递整型的指针,这里定义一个 C# 函数来代劳。

$signature = @'
[DllImport("git2.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern int git_libgit2_version(ref int major, ref int minor, ref int rev);

public static Tuple<int, int, int> GitLibgit2Version() {
    int major = 0;
    int minor = 0;
    int rev = 0;
    git_libgit2_version(ref major, ref minor, ref rev);
    return Tuple.Create(major, minor, rev);
}
'@

$git2 = Add-Type -MemberDefinition $signature -Name libgit2 -Namespace libgit2 -PassThru

$git2::GitLibgit2Version()

# 输出
Item1 Item2 Item3 Length
----- ----- ----- ------
    1     9     0      3

这只是初步尝试的一个小例子,更实用的还是定义、传递结构体,待今后探索。