前提
外部ライブラリ(DLL)を動的に読み込んで、そのライブラリの関数呼び出し方法を考えております。
現状できていること
以下の方法で、エクスポート済関数のアドレス取得による呼び出しは行えました。
C++
1//呼び出し元(DLL) 2typedef LONG(*SAMPLE_Function)(int index); 3 4LONG GetLONGValue(int index) 5{ 6 HMODULE dllInstance; 7 SAMPLE_Function _SAMPLE_Function; 8 dllInstance = static_cast<HMODULE>(LoadLibrary((LPCTSTR)"DLLパス")); 9 _SAMPLE_Function = (SAMPLE_Function)GetProcAddress(dllInstance, "SAMPLE_Function"); 10 return _SAMPLE_Function(index); 11}
C++
1//呼び出し先(DLL) 2#define SAMPLE_API __declspec(dllexport) 3EXTERN_C SAMPLE_API LONG SAMPLE_Function(int index); 4// ※実処理部分は省略
質問内容
エクスポート済関数に続いて、静的クラスの静的メンバ関数を、同様にアドレス取得で呼び出したいと考えております。
それ自体は実現方法があるのでしょうか。
LoadLibrary関数を使用した方法の調査を実施しましたが、あまり良い情報が入手できませんでした。
GetProcAddress関数は、あくまでエクスポート済アドレスの取得になる認識でいます。
また、静的メンバについては、関数ポインタとすることも可能の認識でおります。
C++
1呼び出し先(DLL) 2namespace sample 3{ 4 static class SampleBase 5 { 6 public: 7 static void GetData(SampleChild* data) { data = new SampleChild; }; 8 }; 9 10 class SampleChild 11 { 12 private: 13 int no; 14 public: 15 int get_no() { return no; }; 16 void set_no(int value) { no = value; }; 17 } 18}
・LoadLibrary関数の使用がそもそもの間違い。
・静的メンバ関数で取るのではなく、静的クラスと同じものを定義して、静的クラスポインタでアドレス上書き。
なども考えているのですが、正解が見つけられずにおります。
開発環境
Visual Studio 2010
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/13 01:59