【问题标题】:Simple C program loadlibrary returns 193简单的 C 程序 loadlibrary 返回 193
【发布时间】:2021-08-20 20:29:37
【问题描述】:

前言:我已经在 PowerBuilder 中编程了 25 年,之前上过一门 C 课程,所以我不知道自己在做什么,我非常需要帮助。

我需要编写一个非常简单的 C 程序(无用户界面)来加载 32 位 DLL,调用 2 个函数然后释放 DLL。我第一次使用 VS Code 2019,当我尝试加载 DLL 时得到了 193。从我发现它似乎是由于 64 位系统调用 32 位 DLL 造成的?我尝试使用 VS Premium 2010 并在负载库上得到 126。有问题的 DLL 是 pborc050。有什么想法或建议吗?我发现的一切都表明我需要使用 C 程序(调用 dll 中的函数来创建 powerbuilder 库列表,然后调用另一个函数来导出所有源代码)。这是为一个仍然使用 PB7 编码的应用程序完成的,它非常古老,我假设这就是为什么需要 C 程序而不是任何其他较新的语言的原因。

int main(void) 
{
  HINSTANCE hinstLib;
  MYPROC ProcAdd;
  BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

  // Get a handle to the pborc050.dll
  hinstLib = LoadLibrary("pborc050.dll");

  // If the handle is valid, try to get the function address.
  if (hinstLib != NULL)
    ....
  else
    printf("The LoadLibrary(pborc050) dll handle is not valid, error: %d.\n", GetLastError());

  return 0;
}

【问题讨论】:

  • 您能否确认您是针对 x86 而不是 x64 进行编译?你也看过stackoverflow.com/questions/38579909/…
  • 您的进程的位数需要与 dll 的位数相匹配。在您的情况下,这大概意味着 x86(32 位)。很可能 126 意味着您的 dll 有其他依赖项,可能是动态 crtl 运行时 dll。查看可能加载的其他 dll 的一种方法是附加到正在运行的进程,该进程将 dll 与调试器一起使用,并查看加载的模块列表。我假设你有可以加载这个 dll 的 PowerBuilder 应用程序。
  • 确切的问题是什么?

标签: c loadlibrary


【解决方案1】:

Error 126 = ERROR_MOD_NOT_FOUND "模块未找到"
Error 193 = ERROR_BAD_EXE_FORMAT 可能pborc050.dll 已损坏或位数不匹配
确保您使用与 pborc050.dll 相同的格式进行编译
如果pborc050.dll 是 32bit 则编译为 32bit,否则编译为 64bit

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多