6

以下の詳細を提供する Win32 DLL を開発しました。Connect および LogOut 関数の CLI/C++ ラッパーを作成したいと考えています。

クラスと関数全体を DLL からエクスポートできることを知っています。

class CClientLib
{
 public:
CClientLib (void);
// TODO: add your methods here.
__declspec(dllexport) bool Connect(char* strAccountUID,char* strAccountPWD);
__declspec(dllexport) void LogOut();

 private :

    Account::Ref UserAccount ;
void set_ActiveAccount(Account::Ref act)
{
   // Set the active account
}

Account::Ref get_ActiveAccount()
{
  return UserAccount;
    }

};

エクスポートされた関数 Connect と LogOut としてクラスを持ちたいのですが、関数 set / get を使用します。

クラス全体ではなく、関数 Connect および LogOut のみをエクスポートすることは可能ですか。

4

3 に答える 3

12

エクスポートされるインターフェイスを宣言してから、内部クラスで実装することをお勧めします。

class __declspec(dllexport) IClientLib {
 public:
    virtual bool Connect(char* strAccountUID,char* strAccountPWD) = 0;
    virtual void LogOut() = 0;
};

class CClientLib: public IClientLib {
...
};
于 2012-04-19T12:24:33.247 に答える
0

あなたが何を求めているか考えてみてください... と は両方ともConnectLogout静的メンバー関数です。つまり、タイプのインスタンスでそれらを呼び出す必要があります: intense.Connect()。ここで、クラス自体をエクスポートしないと を作成できず、とがエクスポートされているinstanceかどうかに関係なく、それらは使用できません。ConnectLogout

別の方法は、それらのいずれもエクスポートせず、エクスポートされた無料の関数に、DLL の外では見えないクラスのインスタンスに適用されるのと同じ機能を提供することです。または、ライブラリにハンドルを作成する 3 番目の関数を提供します。ここで、 handlevoid*は動的に割り当てられた型のインスタンスへのopaque () ポインターである可能性があり、そのハンドルを追加の引数として自由関数バージョンのConnectおよびに渡しますLogout。そのオブジェクトを解放するには、4 つ目の関数も追加する必要があります。

于 2012-04-19T11:56:21.223 に答える
0

目的のクラス メソッドを呼び出してエクスポートする 2 つの関数を作成するだけで作成できます。すなわち

CCLientLib g_clientLib;

__declspec(dllexport) void CClientLib_LogOut()
{
    g_clientLib.LogOut();
}

しかし、「プライベート」修飾子でアクセスしたくないメソッドをマークするだけで十分なので、なぜこれが必要なのかわかりません(例で行ったように)。

于 2012-04-19T12:01:55.433 に答える