gpt4 book ai didi

c - UEFI Shelllib - ASSERT 意味着 ShellLib 的初始化?

转载 作者:行者123 更新时间:2023-12-01 13:55:10 26 4
gpt4 key购买 nike

我想方便地控制命令行参数。因此我想使用 ShellLib。

我的代码是这样的:

...
#include <Library/ShellLib.h>
...
EFI_STATUS
EFIAPI
UefiMain (
EFI_HANDLE ImageHandle,
EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
LIST_ENTRY *ParamPkg;
CHAR16 *ProblemParam;

Status = ShellCommandLineParseEx (CmdLineCheckList, &ParamPkg, &ProblemParam, TRUE, FALSE);
...
}

我还初始化了CmdLineCheckList。但是当我运行程序时,我得到一个

ASSERT: UefiShellLib.c (2242): mEfiShellInterface != (void *) 0

我查看了代码行,似乎没有调用 ShellLibConstructor()。但它应该来自 shell 本身,除了直接调用 ShellCommandLineParseEx 之外,我也找不到完成某些操作的示例。由于包含问题,我也未能手动启动构造函数。

能否请您帮助我如何正确初始化我的应用程序以运行 ShellLib?

最佳答案

这里是 ShellLib 中访问参数的示例:https://github.com/tianocore/edk2/blob/master/ShellPkg/Application/ShellCTestApp/ShellCTestApp.c :

INTN
EFIAPI
ShellAppMain (
IN UINTN Argc,
IN CHAR16 **Argv
)
{
UINTN Index;
if (Argc == 1) {
Print (L"Argv[1] = NULL\n");
}
for (Index = 1; Index < Argc; Index++) {
Print(L"Argv[%d]: \"%s\"\n", Index, Argv[Index]);
}

return 0;
}

关于c - UEFI Shelllib - ASSERT 意味着 ShellLib 的初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35626713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com