#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;
}
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;
}