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