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;
#else
#define DllProc0 DllProc
#define DllProc1 DllProc
#define DllProc2 DllProc
#define DllProc3 DllProc
#define DllProc4 DllProc
#define DllProc5 DllProc
using langedge::DllProc;
#endif
typedef langedge::RemotePtr<DllSampleInterface> DllSamplePtr;
using langedge::RemoteBufferProxy;

#ifdef NDEBUG
#if defined(_WIN32) && _MSCVER <= 1200
#define DLL_NAME "../dll_sample/ReleaseV6/dll_sample.dll"
#else
#define DLL_NAME "../dll_sample/Release/dll_sample.dll"
#endif
#else
#if defined(_WIN32) && _MSCVER <= 1200
#define DLL_NAME "../dll_sample/DebugV6/dll_sample.dll"
#else
#define DLL_NAME "../dll_sample/Debug/dll_sample.dll"
#endif
#endif

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

        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;

        DllProc0<DllSampleInterface*> create_instance(loader, "createInstance");
        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;
}

LangEdge ライブラリに対してFri May 6 22:42:58 2005に生成されました。  doxygen 1.4.2