mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-26 09:38:14 -05:00
Get Isle building on MinGW32 (#63)
* Add MxUnknown100dc6b0::~MxUnknown100dc6b0 stub * Declare destructor of MxOmni and MxTransitionManager in class * inline attribute must go first * Stub LegoState::Vtable0x14 for Act3State * MxStreamer::VTable0x14 is not an override * Stub MxEntity::Destroy for LegoState::Destroy * Stub MxUnknown100dc6e0 for MxSoundManager * ::ClassName and ::IsA are const methods * methods in the class body don't need a namespace * MxSoundManager subclasses MxUnknown100dc6e0 * LegoInputManager subclasses MxPresenter * NotificationId is an enum, and does not need __declspec(dllexport) * Fix final #endif of legoomni.h and mxobjectfactory.h * Add const alternative for LegoOmni::Create and MxVideoParam, only available for MinGW * Alternative approach to MinGW compatibility * MinGW on Linux is case sensitve * Don't delete a member variable. C++ automatically destructs member variables --------- Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com>
This commit is contained in:
parent
40dd0a93d4
commit
302b3f66f0
27 changed files with 126 additions and 35 deletions
|
@ -142,6 +142,7 @@ add_library(lego1 SHARED
|
||||||
LEGO1/mxtimer.cpp
|
LEGO1/mxtimer.cpp
|
||||||
LEGO1/mxtransitionmanager.cpp
|
LEGO1/mxtransitionmanager.cpp
|
||||||
LEGO1/mxunknown100dc6b0.cpp
|
LEGO1/mxunknown100dc6b0.cpp
|
||||||
|
LEGO1/mxunknown100dc6e0.cpp
|
||||||
LEGO1/mxvariabletable.cpp
|
LEGO1/mxvariabletable.cpp
|
||||||
LEGO1/mxvideomanager.cpp
|
LEGO1/mxvideomanager.cpp
|
||||||
LEGO1/mxvideoparam.cpp
|
LEGO1/mxvideoparam.cpp
|
||||||
|
|
|
@ -15,14 +15,14 @@ class Act2Brick : public LegoPathActor
|
||||||
virtual long Tickle() override; // vtable+0x08
|
virtual long Tickle() override; // vtable+0x08
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1007a360
|
// OFFSET: LEGO1 0x1007a360
|
||||||
inline virtual const char *ClassName() override // vtable+0x0c
|
inline virtual const char *ClassName() const override // vtable+0x0c
|
||||||
{
|
{
|
||||||
// 0x100f0438
|
// 0x100f0438
|
||||||
return "Act2Brick";
|
return "Act2Brick";
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1007a370
|
// OFFSET: LEGO1 0x1007a370
|
||||||
inline virtual MxBool IsA(const char *name) override // vtable+0x10
|
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
|
||||||
{
|
{
|
||||||
return !strcmp(Act2Brick::ClassName(), name) || LegoEntity::IsA(name);
|
return !strcmp(Act2Brick::ClassName(), name) || LegoEntity::IsA(name);
|
||||||
}
|
}
|
||||||
|
|
14
LEGO1/compat.h
Normal file
14
LEGO1/compat.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef ISLECOMPAT_H
|
||||||
|
#define ISLECOMPAT_H
|
||||||
|
|
||||||
|
// Various macros to enable compiling with other/newer compilers.
|
||||||
|
|
||||||
|
// Use `COMPAT_CONST` where something ought to be 'const', and a newer compiler would complain if it
|
||||||
|
// wasn't, but we know it isn't 'const' in the original code.
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
#define COMPAT_CONST const
|
||||||
|
#else
|
||||||
|
#define COMPAT_CONST
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ISLECOMPAT_H
|
|
@ -2,7 +2,8 @@
|
||||||
#define LEGOBACKGROUNDCOLOR_H
|
#define LEGOBACKGROUNDCOLOR_H
|
||||||
#include "mxstring.h"
|
#include "mxstring.h"
|
||||||
#include "mxcore.h"
|
#include "mxcore.h"
|
||||||
#include "MxStringVariable.h"
|
#include "mxstringvariable.h"
|
||||||
|
|
||||||
class LegoBackgroundColor : public MxStringVariable
|
class LegoBackgroundColor : public MxStringVariable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#ifndef LEGOINPUTMANAGER_H
|
#ifndef LEGOINPUTMANAGER_H
|
||||||
#define LEGOINPUTMANAGER_H
|
#define LEGOINPUTMANAGER_H
|
||||||
|
|
||||||
#include "mxcore.h"
|
#include "mxpresenter.h"
|
||||||
|
|
||||||
__declspec(dllexport) enum NotificationId
|
enum NotificationId
|
||||||
{
|
{
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
KEYDOWN = 7,
|
KEYDOWN = 7,
|
||||||
|
@ -15,7 +15,7 @@ __declspec(dllexport) enum NotificationId
|
||||||
|
|
||||||
// VTABLE 0x100d8760
|
// VTABLE 0x100d8760
|
||||||
// SIZE 0x338
|
// SIZE 0x338
|
||||||
class LegoInputManager
|
class LegoInputManager : public MxPresenter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LegoInputManager();
|
LegoInputManager();
|
||||||
|
@ -27,7 +27,7 @@ class LegoInputManager
|
||||||
|
|
||||||
virtual long Tickle() override; // vtable+0x8
|
virtual long Tickle() override; // vtable+0x8
|
||||||
|
|
||||||
char m_pad00[0x19C];
|
char m_pad00[0x15c];
|
||||||
int m_joystickIndex;
|
int m_joystickIndex;
|
||||||
char m_pad200[0x194];
|
char m_pad200[0x194];
|
||||||
MxBool m_useJoystick;
|
MxBool m_useJoystick;
|
||||||
|
|
|
@ -176,7 +176,7 @@ void LegoOmni::Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x10058e70
|
// OFFSET: LEGO1 0x10058e70
|
||||||
MxResult LegoOmni::Create(MxOmniCreateParam &p)
|
MxResult LegoOmni::Create(COMPAT_CONST MxOmniCreateParam &p)
|
||||||
{
|
{
|
||||||
// FIXME: Stub
|
// FIXME: Stub
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef LEGOOMNI_H
|
#ifndef LEGOOMNI_H
|
||||||
#define LEGOOMNI_H
|
#define LEGOOMNI_H
|
||||||
|
|
||||||
|
#include "compat.h"
|
||||||
#include "legoentity.h"
|
#include "legoentity.h"
|
||||||
#include "legoinputmanager.h"
|
#include "legoinputmanager.h"
|
||||||
#include "legogamestate.h"
|
#include "legogamestate.h"
|
||||||
|
@ -51,7 +52,7 @@ class LegoOmni : public MxOmni
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Init(); // vtable+14
|
virtual void Init(); // vtable+14
|
||||||
virtual MxResult Create(MxOmniCreateParam &p); // vtable+18
|
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18
|
||||||
virtual void Destroy(); // vtable+1c
|
virtual void Destroy(); // vtable+1c
|
||||||
virtual void vtable20();
|
virtual void vtable20();
|
||||||
virtual void vtable24(MxDSAction &ds);
|
virtual void vtable24(MxDSAction &ds);
|
||||||
|
|
|
@ -4,3 +4,8 @@
|
||||||
LegoState::~LegoState()
|
LegoState::~LegoState()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x10005f90
|
||||||
|
MxBool LegoState::VTable0x14() {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ class LegoState : public MxCore
|
||||||
return !strcmp(name, LegoState::ClassName()) || MxCore::IsA(name);
|
return !strcmp(name, LegoState::ClassName()) || MxCore::IsA(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual MxBool VTable0x14();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LEGOSTATE_H
|
#endif // LEGOSTATE_H
|
||||||
|
|
|
@ -11,3 +11,9 @@ MxEntity::~MxEntity()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x10001070 STUB
|
||||||
|
void MxEntity::Destroy()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@ class MxEntity : public MxCore
|
||||||
return !strcmp(name, MxEntity::ClassName()) || MxCore::IsA(name);
|
return !strcmp(name, MxEntity::ClassName()) || MxCore::IsA(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void Destroy(); // vtable+0x1c
|
||||||
|
|
||||||
// 0x8: MxResult
|
// 0x8: MxResult
|
||||||
// 0xc MxAtomId
|
// 0xc MxAtomId
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,14 +15,14 @@ class MxMediaPresenter : public MxPresenter
|
||||||
virtual long Tickle() override; // vtable+0x8, override MxCore
|
virtual long Tickle() override; // vtable+0x8, override MxCore
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1000c5c0
|
// OFFSET: LEGO1 0x1000c5c0
|
||||||
inline virtual const char *MxMediaPresenter::ClassName() const override // vtable+0xc
|
inline virtual const char *ClassName() const override // vtable+0xc
|
||||||
{
|
{
|
||||||
// 0x100f074c
|
// 0x100f074c
|
||||||
return "MxMediaPresenter";
|
return "MxMediaPresenter";
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1000c5d0
|
// OFFSET: LEGO1 0x1000c5d0
|
||||||
inline virtual MxBool MxMediaPresenter::IsA(const char *name) const override // vtable+0x10
|
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
|
||||||
{
|
{
|
||||||
return !strcmp(name, MxMediaPresenter::ClassName()) || MxPresenter::IsA(name);
|
return !strcmp(name, MxMediaPresenter::ClassName()) || MxPresenter::IsA(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,4 +9,4 @@ class MxObjectFactory : public MxCore
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif MXOBJECTFACTORY_H
|
#endif // MXOBJECTFACTORY_H
|
||||||
|
|
|
@ -29,7 +29,8 @@ class MxOmni : public MxCore
|
||||||
__declspec(dllexport) static void SetHD(const char *p_hd);
|
__declspec(dllexport) static void SetHD(const char *p_hd);
|
||||||
__declspec(dllexport) static void SetSound3D(MxBool p_3dsound);
|
__declspec(dllexport) static void SetSound3D(MxBool p_3dsound);
|
||||||
|
|
||||||
virtual ~MxOmni();
|
MxOmni();
|
||||||
|
virtual ~MxOmni() override;
|
||||||
|
|
||||||
virtual long Notify(MxParam &p); // vtable+04
|
virtual long Notify(MxParam &p); // vtable+04
|
||||||
virtual void Init(); // vtable+14
|
virtual void Init(); // vtable+14
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#include "mxsoundmanager.h"
|
#include "mxsoundmanager.h"
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100ae740 STUB
|
// OFFSET: LEGO1 0x100ae740
|
||||||
MxSoundManager::MxSoundManager()
|
MxSoundManager::MxSoundManager()
|
||||||
{
|
{
|
||||||
// TODO
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100ae7d0 STUB
|
// OFFSET: LEGO1 0x100ae7d0 STUB
|
||||||
|
@ -11,3 +11,11 @@ MxSoundManager::~MxSoundManager()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100ae830
|
||||||
|
void MxSoundManager::Init()
|
||||||
|
{
|
||||||
|
m_unk30 = 0;
|
||||||
|
m_unk34 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
#ifndef MXSOUNDMANAGER_H
|
#ifndef MXSOUNDMANAGER_H
|
||||||
#define MXSOUNDMANAGER_H
|
#define MXSOUNDMANAGER_H
|
||||||
|
|
||||||
#include "mxcore.h"
|
#include "mxunknown100dc6e0.h"
|
||||||
|
|
||||||
// VTABLE 0x100dc128
|
// VTABLE 0x100dc128
|
||||||
// SIZE 0x3c
|
// SIZE 0x3c
|
||||||
// Base vtables are: MxCore -> 0x100dc6b0 -> 0x100dc6e0 -> MxSoundManager
|
// Base vtables are: MxCore -> 0x100dc6b0 -> 0x100dc6e0 -> MxSoundManager
|
||||||
class MxSoundManager
|
class MxSoundManager : public MxUnknown100dc6e0
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MxSoundManager();
|
MxSoundManager();
|
||||||
virtual ~MxSoundManager() override; // vtable+0x0
|
virtual ~MxSoundManager() override; // vtable+0x0
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Init();
|
||||||
|
int m_unk30;
|
||||||
|
int m_unk34;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MXSOUNDMANAGER_H
|
#endif // MXSOUNDMANAGER_H
|
||||||
|
|
|
@ -15,7 +15,7 @@ class MxStreamer : public MxCore
|
||||||
__declspec(dllexport) long Close(const char *p);
|
__declspec(dllexport) long Close(const char *p);
|
||||||
|
|
||||||
virtual long Notify(MxParam &p) override; // vtable+0x4
|
virtual long Notify(MxParam &p) override; // vtable+0x4
|
||||||
virtual MxResult VTable0x14() override; // vtable+0x14
|
virtual MxResult VTable0x14(); // vtable+0x14
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MXSTREAMER_H
|
#endif // MXSTREAMER_H
|
||||||
|
|
|
@ -1,14 +1,6 @@
|
||||||
#include "MxStringVariable.h"
|
#include "mxstringvariable.h"
|
||||||
#include "mxstring.h"
|
#include "mxstring.h"
|
||||||
|
|
||||||
//FIXME: Figure out what exactly this class is used for. It is used in LegoGameState::LegoGameState when loading the background color, and for loading the "fsmovie" variable
|
|
||||||
// OFFSET: LEGO1 0x1003bec0
|
|
||||||
MxStringVariable::~MxStringVariable()
|
|
||||||
{
|
|
||||||
|
|
||||||
delete &m_string;
|
|
||||||
delete &m_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1003bea0
|
// OFFSET: LEGO1 0x1003bea0
|
||||||
MxString *MxStringVariable::GetString()
|
MxString *MxStringVariable::GetString()
|
||||||
|
@ -21,3 +13,10 @@ void MxStringVariable::SetString(const char *colorString)
|
||||||
{
|
{
|
||||||
m_string = colorString;
|
m_string = colorString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FIXME: Figure out what exactly this class is used for. It is used in LegoGameState::LegoGameState when loading the background color, and for loading the "fsmovie" variable
|
||||||
|
// OFFSET: LEGO1 0x1003bec0
|
||||||
|
void MxStringVariable::Destroy()
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ class MxStringVariable
|
||||||
MxStringVariable() {}
|
MxStringVariable() {}
|
||||||
virtual MxString *GetString();
|
virtual MxString *GetString();
|
||||||
virtual void SetString(const char *colorString);
|
virtual void SetString(const char *colorString);
|
||||||
virtual ~MxStringVariable();
|
virtual void Destroy();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MxString m_name;
|
MxString m_name;
|
||||||
|
|
|
@ -15,7 +15,7 @@ class MxTimer : public MxCore
|
||||||
|
|
||||||
__declspec(dllexport) long GetRealTime();
|
__declspec(dllexport) long GetRealTime();
|
||||||
|
|
||||||
long GetTime() inline
|
inline long GetTime()
|
||||||
{
|
{
|
||||||
if (this->m_isRunning)
|
if (this->m_isRunning)
|
||||||
return s_LastTimeCalculated;
|
return s_LastTimeCalculated;
|
||||||
|
|
|
@ -9,7 +9,8 @@ class MxVideoPresenter;
|
||||||
class MxTransitionManager : public MxCore
|
class MxTransitionManager : public MxCore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~MxTransitionManager(); // vtable+0x0
|
MxTransitionManager();
|
||||||
|
virtual ~MxTransitionManager() override; // vtable+0x0
|
||||||
|
|
||||||
__declspec(dllexport) void SetWaitIndicator(MxVideoPresenter *videoPresenter);
|
__declspec(dllexport) void SetWaitIndicator(MxVideoPresenter *videoPresenter);
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,12 @@ MxUnknown100dc6b0::MxUnknown100dc6b0()
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100b8560 STUB
|
||||||
|
MxUnknown100dc6b0::~MxUnknown100dc6b0()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100b85d0
|
// OFFSET: LEGO1 0x100b85d0
|
||||||
MxResult MxUnknown100dc6b0::Init()
|
MxResult MxUnknown100dc6b0::Init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,6 +10,7 @@ class MxUnknown100dc6b0 : public MxCore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MxUnknown100dc6b0();
|
MxUnknown100dc6b0();
|
||||||
|
virtual ~MxUnknown100dc6b0() override;
|
||||||
|
|
||||||
MxResult Init();
|
MxResult Init();
|
||||||
|
|
||||||
|
|
19
LEGO1/mxunknown100dc6e0.cpp
Normal file
19
LEGO1/mxunknown100dc6e0.cpp
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#include "mxunknown100dc6e0.h"
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100b8d00
|
||||||
|
MxUnknown100dc6e0::MxUnknown100dc6e0()
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100b8d90 STUB
|
||||||
|
MxUnknown100dc6e0::~MxUnknown100dc6e0()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100b8df0
|
||||||
|
void MxUnknown100dc6e0::Init()
|
||||||
|
{
|
||||||
|
this->m_unk2c = 100;
|
||||||
|
}
|
19
LEGO1/mxunknown100dc6e0.h
Normal file
19
LEGO1/mxunknown100dc6e0.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef MXUNKNOWN100DC6E0_H
|
||||||
|
#define MXUNKNOWN100DC6E0_H
|
||||||
|
|
||||||
|
#include "mxunknown100dc6b0.h"
|
||||||
|
|
||||||
|
// VTABLE 0x100dc6e0
|
||||||
|
class MxUnknown100dc6e0 : public MxUnknown100dc6b0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MxUnknown100dc6e0();
|
||||||
|
virtual ~MxUnknown100dc6e0() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
int m_unk2c;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MXUNKNOWN100DC6E0_H
|
|
@ -17,7 +17,7 @@ MxVideoParam::MxVideoParam()
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100beca0
|
// OFFSET: LEGO1 0x100beca0
|
||||||
MxVideoParam::MxVideoParam(MxRect32 &p_rect, MxPalette *p_pal, unsigned long p_backBuffers, MxVideoParamFlags &p_flags)
|
MxVideoParam::MxVideoParam(COMPAT_CONST MxRect32 &p_rect, MxPalette *p_pal, unsigned long p_backBuffers, COMPAT_CONST MxVideoParamFlags &p_flags)
|
||||||
{
|
{
|
||||||
this->m_rect.m_left = p_rect.m_left;
|
this->m_rect.m_left = p_rect.m_left;
|
||||||
this->m_rect.m_top = p_rect.m_top;
|
this->m_rect.m_top = p_rect.m_top;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
|
|
||||||
|
#include "compat.h"
|
||||||
#include "mxpalette.h"
|
#include "mxpalette.h"
|
||||||
#include "mxrect32.h"
|
#include "mxrect32.h"
|
||||||
#include "mxtypes.h"
|
#include "mxtypes.h"
|
||||||
|
@ -14,7 +15,7 @@ class MxVideoParam
|
||||||
public:
|
public:
|
||||||
__declspec(dllexport) MxVideoParam();
|
__declspec(dllexport) MxVideoParam();
|
||||||
__declspec(dllexport) MxVideoParam(MxVideoParam &);
|
__declspec(dllexport) MxVideoParam(MxVideoParam &);
|
||||||
__declspec(dllexport) MxVideoParam(MxRect32 &rect, MxPalette *pal, unsigned long p3, MxVideoParamFlags &flags);
|
__declspec(dllexport) MxVideoParam(COMPAT_CONST MxRect32 &rect, MxPalette *pal, unsigned long p3, COMPAT_CONST MxVideoParamFlags &flags);
|
||||||
__declspec(dllexport) MxVideoParam &operator=(const MxVideoParam &);
|
__declspec(dllexport) MxVideoParam &operator=(const MxVideoParam &);
|
||||||
__declspec(dllexport) ~MxVideoParam();
|
__declspec(dllexport) ~MxVideoParam();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue