重複の可能性:
C++ でのプライベート メソッドの呼び出し
私は DLL を持っており、その DLL でいくつかの関数を公開しましたが、そのうちの 1 つは非公開です。機能はC_MORPHO_Device::InitUsbDevicesNameEnum(PUL o_pul_NbUsbDevice)
.
InitUsbDevicesNameEnum
アプリケーションでこの関数を呼び出すにはどうすればよいですか?
重複の可能性:
C++ でのプライベート メソッドの呼び出し
私は DLL を持っており、その DLL でいくつかの関数を公開しましたが、そのうちの 1 つは非公開です。機能はC_MORPHO_Device::InitUsbDevicesNameEnum(PUL o_pul_NbUsbDevice)
.
InitUsbDevicesNameEnum
アプリケーションでこの関数を呼び出すにはどうすればよいですか?
それをしないでください。ライブラリの作成者は関数を非公開にしているため、呼び出してはなりません。ドキュメントを読んで、呼び出す予定の関数を見つけてください。
プライベートメソッドは他の人にプライベートにする必要があります。プライベートとして作成された場合、なぜプライベートメソッドを呼び出す必要があるのですか?彼らはどういうわけかこのように作った。
このメソッドを呼び出すことで、他の関数public
または関数をチェックできます。しかし、それはプライベートメソッドにアクセスするための良い方法ではありませんfriend
InitUsbDevicesNameEnum
プライベートメソッドもエクスポートされますか?私はそれを疑っています(なぜ彼らはプライベートメソッドをエクスポートするのでしょうか?)。ただし、エクスポートされる場合は、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)(...);
クラスをインスタンス化し、そのプライベート メソッドを呼び出す直接的な方法はありません。