【问题标题】:Late binding to a library with "extern" defined variables后期绑定到带有“外部”定义变量的库
【发布时间】:2012-01-07 20:21:29
【问题描述】:

我正在尝试将我的程序延迟绑定到 DLL。
我知道如何导入它的方法,但在它的头文件中,我有一个这样的定义:

EXTERN_C const IID SomeVariable;

如何在我的程序中引用此变量而不会出现“未解析的外部符号”错误?

【问题讨论】:

  • 您能否详细说明您为函数所做的后期绑定?
  • 我知道函数的签名,所以我定义了一个与之匹配的函数指针。然后我只需使用 DLL 句柄和函数名称调用“GetProcAddress”。我将结果分配给我的函数指针的一个实例,然后我可以将它用作任何其他函数。
  • 这个变量没有被导出的可能性非常高。使用 DLL 上的 dumpbin.exe /exports 进行仔细检查。

标签: c++ windows extern late-binding


【解决方案1】:

您可以使用 GetProcAddress 来获取函数或变量的地址。

【讨论】:

    【解决方案2】:

    请参阅 MSDN 上的 GetProcAddr()

    const IID *idp = reinterpret_cast<const IID *>(GetProcAddr(hLibrary, "SomeVariable"));
    

    现在您可以通过指针引用SomeVariable - 就像您可以通过指针引用函数一样。当然,你应该在实际使用它之前检查指针不为空!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      相关资源
      最近更新 更多