【问题标题】:call Private function in c++ [duplicate]在c ++中调用私有函数[重复]
【发布时间】:2013-01-09 01:14:35
【问题描述】:

可能重复:
Calling private method in C++

我有一个 DLL,在那个 DLL 中他们公开了一些函数,但其​​中一个是私有的。函数是C_MORPHO_Device::InitUsbDevicesNameEnum(PUL o_pul_NbUsbDevice)

如何在我的应用程序中调用 InitUsbDevicesNameEnum 函数?

【问题讨论】:

  • 另外,除非库设计不当......你不应该这样做。

标签: c++


【解决方案1】:

不要那样做。库作者已将函数设为私有,因此您不应调用它。阅读文档以了解您打算调用哪些函数。

【讨论】:

    【解决方案2】:

    没有直接的方法来实例化类并调用它的私有方法。

    【讨论】:

      【解决方案3】:

      私有方法是否也导出了?我对此表示怀疑(他们为什么要导出私有方法?)。但如果是导出的,可以使用 dumpbin /exports 命令查看修饰的方法名称,然后使用 GetProcAddress 获取指向该方法的函数指针并调用该类的实例。比如:

      HMODULE hModule = LoadLibrary(L"thedll.dll");
      (C_MORPHO_Device::*pMethod)(PUL) = reinterpret_cast<(C_MORPHO_Device::*)(PUL)>(GetProcAddress(hModule, L"InitUsbDevicesNameEnum@_ABunchOfSymbolsHere"));
      
      C_MORPHO_Device device;
      (device.*pMethod)(...);
      

      【讨论】:

        【解决方案4】:

        私有方法应该是私有的给其他人。如果将 at 作为私有方法,为什么需要调用私有方法?出于某种原因,他们这样做了。

        您可以在调用此方法InitUsbDevicesNameEnum 时检查任何其他publicfriend 函数。但这不是访问私有方法的好方法

        【讨论】:

          猜你喜欢
          • 2016-03-28
          • 1970-01-01
          • 2014-09-03
          • 2021-03-20
          • 2016-04-22
          • 1970-01-01
          • 2012-08-27
          • 1970-01-01
          • 2012-09-07
          相关资源
          最近更新 更多