dll_sample_test.cpp

// dll_sample_test.cpp : コンソール アプリケーション用のエントリ ポイントの定義
//

#include "stdafx.h"

#include <iostream>
using std::cout;
using std::endl;

#include "dll_sample/dll_sample_interface.h"
#include "langedge/dll_loader.hpp"
#include "langedge/remote_ptr.hpp"
#include "langedge/dll_support/buffer_proxy.hpp"
typedef langedge::DllLoader DllSampleLoader;

#if defined(_WIN32) && _MSC_VER <= 1200

using langedge::DllProc0;
using langedge::DllProc1;
using langedge::DllProc2;
using langedge::DllProc3;
using langedge::DllProc4;
using langedge::DllProc5;
using langedge::DllProc6;
using langedge::DllProc7;
using langedge::DllProc8;
using langedge::DllProc9;
using langedge::DllVoidProc0;
using langedge::DllVoidProc1;
using langedge::DllVoidProc2;
using langedge::DllVoidProc3;
using langedge::DllVoidProc4;
using langedge::DllVoidProc5;
using langedge::DllVoidProc6;
using langedge::DllVoidProc7;
using langedge::DllVoidProc8;
using langedge::DllVoidProc9;
# ifdef NDEBUG
# define DLL_NAME "../dll_sample/ReleaseV6/dll_sample.dll"
# else
# define DLL_NAME "../dll_sample/DebugV6/dll_sample.dll"
# endif

#else 

using langedge::DllProc;
# ifdef NDEBUG
#define DLL_NAME "../dll_sample/Release/dll_sample.dll"
# else
#define DLL_NAME "../dll_sample/Debug/dll_sample.dll"
# endif

#endif

typedef langedge::RemotePtr<DllSampleInterface> DllSamplePtr;
using langedge::RemoteBufferProxy;

int main(int argc, char* argv[])
{
    try {
        DllSampleLoader loader;
        loader.loadLibrary( DLL_NAME );

#if defined(_WIN32) && _MSC_VER <= 1200
        cout << DllProc0<int>(loader, "proc0")() << endl;
        cout << DllProc1<int, int>(loader, "proc1")(1) << endl;
        cout << DllProc2<int, int, int>(loader, "proc2")(1,2) << endl;
        cout << DllProc3<int, int, int, int>(loader, "proc3")(1,2,3) << endl;
        cout << DllProc4<int, int, int, int, int>(loader, "proc4")(1,2,3,4) << endl;
        cout << DllProc5<int, int, int, int, int, int>(loader, "proc5")(1,2,3,4,5) << endl;
        cout << DllProc6<int, int, int, int, int, int, int>(loader, "proc6")(1,2,3,4,5,6) << endl;
        cout << DllProc7<int, int, int, int, int, int, int, int>(loader, "proc7")(1,2,3,4,5,6,7) << endl;
        cout << DllProc8<int, int, int, int, int, int, int, int, int>(loader, "proc8")(1,2,3,4,5,6,7,8) << endl;
        cout << DllProc9<int, int, int, int, int, int, int, int, int, int>(loader, "proc9")(1,2,3,4,5,6,7,8,9) << endl;

        DllVoidProc0(loader, "voidproc0")();
        DllVoidProc1<int>(loader, "voidproc1")(1);
        DllVoidProc2<int, int>(loader, "voidproc2")(1,2);
        DllVoidProc3<int, int, int>(loader, "voidproc3")(1,2,3);
        DllVoidProc4<int, int, int, int>(loader, "voidproc4")(1,2,3,4);
        DllVoidProc5<int, int, int, int, int>(loader, "voidproc5")(1,2,3,4,5);
        DllVoidProc6<int, int, int, int, int, int>(loader, "voidproc6")(1,2,3,4,5,6);
        DllVoidProc7<int, int, int, int, int, int, int>(loader, "voidproc7")(1,2,3,4,5,6,7);
        DllVoidProc8<int, int, int, int, int, int, int, int>(loader, "voidproc8")(1,2,3,4,5,6,7,8);
        DllVoidProc9<int, int, int, int, int, int, int, int, int>(loader, "voidproc9")(1,2,3,4,5,6,7,8,9);
        cout << DllProc0<int>(loader, "proc0")() << endl;

        DllProc0<DllSampleInterface*> create_instance(loader, "createInstance");
#else
        cout << DllProc<int>(loader, "proc0")() << endl;
        cout << DllProc<int, int>(loader, "proc1")(1) << endl;
        cout << DllProc<int, int, int>(loader, "proc2")(1,2) << endl;
        cout << DllProc<int, int, int, int>(loader, "proc3")(1,2,3) << endl;
        cout << DllProc<int, int, int, int, int>(loader, "proc4")(1,2,3,4) << endl;
        cout << DllProc<int, int, int, int, int, int>(loader, "proc5")(1,2,3,4,5) << endl;
        cout << DllProc<int, int, int, int, int, int, int>(loader, "proc6")(1,2,3,4,5,6) << endl;
        cout << DllProc<int, int, int, int, int, int, int, int>(loader, "proc7")(1,2,3,4,5,6,7) << endl;
        cout << DllProc<int, int, int, int, int, int, int, int, int>(loader, "proc8")(1,2,3,4,5,6,7,8) << endl;
        cout << DllProc<int, int, int, int, int, int, int, int, int, int>(loader, "proc9")(1,2,3,4,5,6,7,8,9) << endl;

        DllProc<void>(loader, "voidproc0")();
        DllProc<void, int>(loader, "voidproc1")(1);
        DllProc<void, int, int>(loader, "voidproc2")(1,2);
        DllProc<void, int, int, int>(loader, "voidproc3")(1,2,3);
        DllProc<void, int, int, int, int>(loader, "voidproc4")(1,2,3,4);
        DllProc<void, int, int, int, int, int>(loader, "voidproc5")(1,2,3,4,5);
        DllProc<void, int, int, int, int, int, int>(loader, "voidproc6")(1,2,3,4,5,6);
        DllProc<void, int, int, int, int, int, int, int>(loader, "voidproc7")(1,2,3,4,5,6,7);
        DllProc<void, int, int, int, int, int, int, int, int>(loader, "voidproc8")(1,2,3,4,5,6,7,8);
        DllProc<void, int, int, int, int, int, int, int, int, int>(loader, "voidproc9")(1,2,3,4,5,6,7,8,9);
        cout << DllProc<int>(loader, "proc0")() << endl;

        DllProc<DllSampleInterface*> create_instance(loader, "createInstance");
#endif
        DllSamplePtr pObj( create_instance() );

        cout << "getInteger() = " << pObj->getInteger() << endl;

        RemoteBufferProxy<char> bufProxy( pObj->getDllName() );
        cout << "BufferSize: " << bufProxy.size() << endl;
        cout << "DllName: " << bufProxy.begin() << endl;

        // ここで bufProxy のデストラクタにより pObj->getDllName() で確保したバッファが解放される。
        // ここで RemotePtr のデストラクタにより pObj->release() が呼ばれて、createInstance() で
        // 生成されたオブジェクトが解放される。
        // ここで loader のデストラクタにより DLL が free される。
    }
    catch (langedge::LoadLibraryError&) {
        cout << "Can't load library" << endl;
    }
    catch (langedge::GetProcessError&) {
        cout << "Can't get Proc Addr" << endl;
    }
    catch (...) {
        cout << "Unknown exception" << endl;
    }
    return 0;
}

正規表現ライブラリ lei_jregexに対してWed May 11 15:29:31 2005に生成されました。  doxygen 1.4.2