0

重複の可能性:
C++ でのプライベート メソッドの呼び出し

私は DLL を持っており、その DLL でいくつかの関数を公開しましたが、そのうちの 1 つは非公開です。機能はC_MORPHO_Device::InitUsbDevicesNameEnum(PUL o_pul_NbUsbDevice).

InitUsbDevicesNameEnumアプリケーションでこの関数を呼び出すにはどうすればよいですか?

4

4 に答える 4

3

それをしないでください。ライブラリの作成者は関数を非公開にしているため、呼び出してはなりません。ドキュメントを読んで、呼び出す予定の関数を見つけてください。

于 2013-01-25T05:10:09.783 に答える
1

プライベートメソッドは他の人にプライベートにする必要があります。プライベートとして作成された場合、なぜプライベートメソッドを呼び出す必要があるのですか?彼らはどういうわけかこのように作った。

このメソッドを呼び出すことで、他の関数publicまたは関数をチェックできます。しかし、それはプライベートメソッドにアクセスするための良い方法ではありませんfriendInitUsbDevicesNameEnum

于 2013-01-25T05:17:49.633 に答える
0

プライベートメソッドもエクスポートされますか?私はそれを疑っています(なぜ彼らはプライベートメソッドをエクスポートするのでしょうか?)。ただし、エクスポートされる場合は、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)(...);
于 2013-01-25T05:13:59.687 に答える
0

クラスをインスタンス化し、そのプライベート メソッドを呼び出す直接的な方法はありません。

于 2013-01-25T05:12:21.263 に答える