Compilation for MSVC2013, thanks @dalkon

OTclient now compiles in "Microsoft Visual Studio 2013 Express for Windows Desktop"
All the needed libraries you can download at https://www.dropbox.com/s/2yfb1c763io8efy/otclient-msvc13-libs.zip
NOTE: You have to change VC++ Directories to the properly directories
NOTE: Latested MSVC 2013 or greated is required
This commit is contained in:
Eduardo Bart
2013-11-12 16:31:51 -02:00
parent c9597d6682
commit 1060c6f78c
17 changed files with 1514 additions and 34 deletions

View File

@@ -351,17 +351,10 @@ void Map::setShowZone(tileflags_t zone, bool show)
void Map::setShowZones(bool show)
{
#ifdef _MSC_VER
static const uint32 defaultZoneFlags
= TILESTATE_HOUSE | TILESTATE_PROTECTIONZONE;
#else
static constexpr uint32 defaultZoneFlags
= TILESTATE_HOUSE | TILESTATE_PROTECTIONZONE;
#endif
if(!show)
m_zoneFlags = 0;
else if(m_zoneFlags == 0)
m_zoneFlags = defaultZoneFlags;
m_zoneFlags = TILESTATE_HOUSE | TILESTATE_PROTECTIONZONE;
}
void Map::setZoneColor(tileflags_t zone, const Color& color)

View File

@@ -52,13 +52,8 @@
namespace Fw
{
#ifdef _MSC_VER
static const float pi = 3.14159265;
static const float MIN_ALPHA = 0.003f;
#else
constexpr float pi = 3.14159265;
constexpr float MIN_ALPHA = 0.003f;
#endif
enum Key : unsigned char {
KeyUnknown = 0,
KeyEscape = 1,

View File

@@ -83,7 +83,7 @@ bool Shader::compileSourceFile(const std::string& sourceFile)
std::string sourceCode = g_resources.readFileContents(sourceFile);
return compileSourceCode(sourceCode);
} catch(stdext::exception& e) {
g_logger.error(stdext::format("unable to load shader source form file: %s", sourceFile));
g_logger.error(stdext::format("unable to load shader source form file '%s': %s", sourceFile, e.what()));
}
return false;
}

View File

@@ -53,8 +53,8 @@ void LuaInterface::init()
m_globalEnv = ref();
pop();
// check if demangle_type is working as expected
assert(stdext::demangle_type<LuaObject>() == "LuaObject");
// check if demangle_class is working as expected
assert(stdext::demangle_class<LuaObject>() == "LuaObject");
// register LuaObject, the base of all other objects
registerClass<LuaObject>();

View File

@@ -64,24 +64,24 @@ public:
// register shortcuts using templates
template<class C, class B = LuaObject>
void registerClass() {
registerClass(stdext::demangle_type<C>(), stdext::demangle_type<B>());
registerClass(stdext::demangle_class<C>(), stdext::demangle_class<B>());
}
template<class C>
void registerClassStaticFunction(const std::string& functionName, const LuaCppFunction& function) {
registerClassStaticFunction(stdext::demangle_type<C>(), functionName, function);
registerClassStaticFunction(stdext::demangle_class<C>(), functionName, function);
}
template<class C>
void registerClassMemberFunction(const std::string& functionName, const LuaCppFunction& function) {
registerClassMemberFunction(stdext::demangle_type<C>(), functionName, function);
registerClassMemberFunction(stdext::demangle_class<C>(), functionName, function);
}
template<class C>
void registerClassMemberField(const std::string& field,
const LuaCppFunction& getFunction,
const LuaCppFunction& setFunction) {
registerClassMemberField(stdext::demangle_type<C>(), field, getFunction, setFunction);
registerClassMemberField(stdext::demangle_class<C>(), field, getFunction, setFunction);
}
// methods for binding functions

View File

@@ -117,5 +117,9 @@ int LuaObject::getUseCount()
std::string LuaObject::getClassName()
{
// TODO: this could be cached for more performance
#ifdef _MSC_VER
return stdext::demangle_name(typeid(*this).name()) + 6;
#else
return stdext::demangle_name(typeid(*this).name());
#endif
}

View File

@@ -148,10 +148,10 @@ LONG CALLBACK ExceptionHandler(LPEXCEPTION_POINTERS e)
MessageBox(NULL, msg.c_str(), "Application crashed", 0);
// this seems to silently close the application
return EXCEPTION_EXECUTE_HANDLER;
//return EXCEPTION_EXECUTE_HANDLER;
// this triggers the microsoft "application has crashed" error dialog
//return EXCEPTION_CONTINUE_SEARCH;
return EXCEPTION_CONTINUE_SEARCH;
}
void installCrashHandler()

View File

@@ -48,7 +48,7 @@ class WIN32Window : public PlatformWindow
bool isExtensionSupported(const char *ext);
LRESULT windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
friend class WindowProcProxy;
friend struct WindowProcProxy;
Fw::Key retranslateVirtualKey(WPARAM wParam, LPARAM lParam);

View File

@@ -121,7 +121,7 @@ template<>
inline bool cast(const std::string& in, float& f) {
double d;
if(cast(in, d)) {
f=d;
f=(float)d;
return true;
}
return false;

View File

@@ -38,7 +38,7 @@ const char* demangle_name(const char* name)
#ifdef _MSC_VER
static char buffer[1024];
UnDecorateSymbolName(name, buffer, sizeof(buffer), UNDNAME_COMPLETE);
return &buffer[6];
return buffer;
#else
size_t len;
int status;

View File

@@ -31,6 +31,15 @@ namespace stdext {
/// Demangle names for GNU g++ compiler
const char* demangle_name(const char* name);
/// Returns the name of a class
template<typename T> std::string demangle_class() {
#ifdef _MSC_VER
return demangle_name(typeid(T).name()) + 6;
#else
return demangle_name(typeid(T).name());
#endif
}
/// Returns the name of a type
template<typename T> std::string demangle_type() { return demangle_name(typeid(T).name()); }

View File

@@ -55,13 +55,13 @@ template<int N> struct expand_snprintf {
template<typename Tuple, typename... Args> static int call(char *s, size_t maxlen, const char *format, const Tuple& tuple, const Args&... args) {
return expand_snprintf<N-1>::call(s, maxlen, format, tuple, sprintf_cast(std::get<N-1>(tuple)), args...); }};
template<> struct expand_snprintf<0> {
template<typename Tuple, typename... Args> static int call(char *s, size_t maxlen, const char *format, const Tuple& tuple, const Args&... args) {
#ifdef _MSC_VER
template<typename Tuple, typename... Args> static int call(char *s, size_t maxlen, const char *format, const Tuple& tuple, const Args&... args) {
return _snprintf(s, maxlen, format, args...); }
return _snprintf(s, maxlen, format, args...);
#else
template<typename Tuple, typename... Args> static int call(char *s, size_t maxlen, const char *format, const Tuple& tuple, const Args&... args) {
return snprintf(s, maxlen, format, args...); }
return snprintf(s, maxlen, format, args...);
#endif
}
};
// Improved snprintf that accepts std::string and other types

View File

@@ -36,7 +36,7 @@ void microsleep(size_t us);
struct timer {
public:
timer() { restart(); }
float elapsed_seconds() { return (stdext::micros() - m_start)/1000000.0; }
float elapsed_seconds() { return (float)((stdext::micros() - m_start)/1000000.0); }
ticks_t elapsed_millis() { return (stdext::micros() - m_start)/1000; }
ticks_t elapsed_micros() { return stdext::micros() - m_start; }
void restart() { m_start = stdext::micros(); }

View File

@@ -172,11 +172,7 @@ enum TiXmlEncoding
TIXML_ENCODING_UTF8,
TIXML_ENCODING_LEGACY
};
#ifdef _MSC_VER
static const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;
#else
constexpr TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;
#endif
/** TiXmlBase is a base class for every class in TinyXml.
It does little except to establish that TinyXml classes
can be printed and provide some utility functions.