DLL呼び出し(1)

ひとまずCObjectCreaterの使い方を覚える為にサンプルコードを作成しました。
呼ばれる側のDLLのコードはこんな感じです。


001 // 0519test_dll.cpp : DLL アプリケーションのエントリ ポイントを定義します。
002 //
003 //yaneSDK_d.libのプロジェクト追加が必要
004 #include "stdafx.h"
005 BOOL APIENTRY DllMain( HANDLE hModule,
006 DWORD ul_reason_for_call,
007 LPVOID lpReserved
008 )
009 {
010 return TRUE;
011 }
012
013
014 #include "../yaneSDK/stdafx.h"
015 #include "../yaneSDK/AppFrame/yaneObjectCreater.h"
016
017 class IPlugInTest
018 {
019 public:
020 virtual int Calc(int n) = 0;
021 virtual IPluginTest(){}
022 };
023
024 class CPluginTest : public IPlugInTest
025 {
026 virtual int Calc(int n)
027 {
028 int nTotal = 0;
029 for(int i=1;i<=n;i++)
030 {
031 nTotal+=i;
032 }
033 return nTotal;
034 }
035 };
036
037 void YaneRegistPlugIn(IObjectCreater*p)
038 {
039 p->RegistClass("CPlugInTest",new factory<CPluginTest>);
040 }
041
042 extern "C" __declspec( dllexport ) void _cdecl YaneDllInitializer(void*p){
043 IObjectCreater* pObjectCreater = static_cast<IObjectCreater*>(p);
044 // user定義↓
045 YaneRegistPlugIn(pObjectCreater);
046 }
047
048
で、呼ぶ側はこんな感じ。テストなのでMainThreadで一回実行して、ループせずに終了させています。

001 void CApp::MainThread() // これが実行される
002 {
003 CObjectCreater::GetObj()->LoadPlugIn("../0519test_dll/debug/0519test_dll.dll");
004 IPlugInTest* p = (IPlugInTest*)CObjectCreater::GetObj()->Create("CPlugInTest");
005 int t;
006 if(p!=NULL)
007 {
008 t = p->Calc(10);
009 }
010 //リリースを忘れないように
011 CObjectCreater::GetObj()->ReleasePlugIn("0519test_dll.dll");
012
013
014 // while (IsThreadValid())
015 // {
016 // }
017
018 }
とても簡単。次はこいつでISceneをDLLに入れてやるのです(続く)。