dll(コンストラクタin dll)からいくつかのクラスを作成するにはどうすればよいですか?または(dll) DLLからクラスを動的にロードする方法はありますか?dll(コンストラクタin dll)からのクラスの作成方法(с++)
答えて
厳密にあなたの質問に答える、あなたはコンストラクタの結果を返すにextern「C」機能を追加する必要があります。
extern "C" foo* __declspec(dllexport) new_foo(int x) {
return new foo(x);
}
を次に、あなたの元に、あなたは、関数を呼び出すために「new_foo」にGetProcAddrを使用することができます。
コンストラクタを呼び出して新しいオブジェクトを返す関数を、DLLからエクスポートする必要があります。
具体的なC++型を関数パラメータとして使用しないようにしてください。 DLLのアイデアは、それらを独立に更新できるということですが、アップグレードされたコンパイラはstd :: stringを異なる方法でレイアウトし、実行時に非互換性を引き起こします。
これはCOMのルートにあります。たとえば、オブジェクトのインスタンスを取得するための限定型システムと標準のエクスポート関数です。
DLLをビルドするときにキーワード__declspec(dllexport)
を使用してクラスを宣言する必要があります。 DLLを使用する場合は、クラスが__declspec(dllimport)
で宣言する必要があります:DLLがコンパイルされたとき、あなたは定義のリストに-DCOMPILING_DLLを追加する必要があります
#ifdef COMPILING_DLL
#define DECLSPEC_CLASS __declspec(dllexport)
#else
#define DECLSPEC_CLASS __declspec(dllimport)
#endif
class DECLSPEC_CLASS MyClass
{
...
}
。
クラスを使用する場合は、静的にDLLにリンクする必要があります。つまり、インポートライブラリmydll.libをメインプログラムに渡す必要があります。
DLL をランタイムにロードするには、オブジェクトを作成して返すC関数がDLLに必要です。 GetProcAddress()を使用してDLL内で動的にコンストラクタをルックアップする方法はありません。
代わりに__declspecを使用して、クラスのすべてのメソッドをエクスポートするの、あなたはコンパイラは、たとえばので、vtableのを介して仮想関数を呼び出すことができるという事実にも頼ることができます。
//note: no __declspec
class IPublicInterface
{
virtual ~IPublicInterface() = 0;
virtual void SomeMethod() = 0;
};
//note: no __declspec
class SomeClass : IPublicInterface
{
virtual ~SomeClass() { ... }
virtual void SomeMethod() { ... }
};
//note: this is the only method which needs to be exported from the DLL
IPublicInterface* createSomeClass()
{
return new SomeClass();
}
インターフェイス/工場パターンがいいです.defaultsエクスポートテーブル –
メモリはDLLに割り当てられているので、' freeSomClass(IPublicInterface *) 'メモリが正しく解放されていることを確認しますか? – Robert
この回答は間違っていると思いますので、削除する必要があります。 プラグインとアプリケーションの両方でまったく同じコンパイラが使用されている場合を除いて、プラグイン境界を越えてポリモーフィックオブジェクトを渡すことはできません。 –
- 1. JNI dllブリッジの作成方法
- 2. アンマネージdllクラスのインスタンスを作成
- 3. C++ DLLからGOメソッドへのコールバックを作成する方法
- 4. Interop DLLから作業中のCOM dllインストールを見つける方法
- 5. HEXコードからDLLを作成
- 6. DLLからPDBを作成する
- 7. Visual C++でダイアログボックスを持つdllを作成する方法(Windowsアプリケーション用のDLL)
- 8. は、DLLのクラス
- 9. DLLからのクラス関数の使用
- 10. ネイティブDLLを作成
- 11. win32 dll in C#.net
- 12. matlabでDLLを作成し、これらのDLLを.Netアプリケーションで使用する方法
- 13. vb.net dllのdllからc#クラスをインポートすることは可能ですか?
- 14. Visual Studioでnunit-console runnerのcs-fileからdllファイルを作成する方法
- 15. 別の.dllを参照する.dllを作成します。
- 16. 私のC++コードのDLLを作成する方法。
- 17. dllから基底クラスを隠す
- 18. DLLクラスからテンプレート値を返す
- 19. DLLのクラスを使用してVB6アプリケーションを作成し、ビルド後にそのDLLをスワップアウトしますか?
- 20. 外部の.dllで.exeファイルを作成する方法
- 21. Pantheios logger用の固定バックエンドDLLを作成する方法
- 22. SimulinkとStateflowから.NET DLLライブラリを生成する方法
- 23. Visual Studio 2010からSWIGを使用してDLLを作成する方法
- 24. Visual Studio 2015でDLL作成をANSIからUNICODEに切り替える方法
- 25. DNNモジュールで使用するWSDLからDLLを作成する方法
- 26. IKVM 7.0 - JARからDLLファイルを正常に作成する方法
- 27. C#DLLからクラスのインターフェイスを実装する方法はありますか?
- 28. dllからの画像の使い方
- 29. VC++でのDLLの作成(Visual Studio 2008)
- 30. vb6でのActiveX dllの作成
あなたは、一致するヘッダファイルを持っていますおよび/またはdllにアクセスするためのライブラリファイル? –
はい私はヘッダとソースを持っています – SomeUser