Add API_INTERFACE to scripting API bindings for implementing interfaces
This commit is contained in:
@@ -62,6 +62,7 @@ ScriptingType::ScriptingType()
|
||||
, Fullname(nullptr, 0)
|
||||
, Type(ScriptingTypes::Script)
|
||||
, BaseTypePtr(nullptr)
|
||||
, Interfaces(nullptr)
|
||||
{
|
||||
Script.Spawn = nullptr;
|
||||
Script.VTable = nullptr;
|
||||
@@ -72,7 +73,7 @@ ScriptingType::ScriptingType()
|
||||
Script.DefaultInstance = nullptr;
|
||||
}
|
||||
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, SpawnHandler spawn, const ScriptingTypeHandle& baseType, SetupScriptVTableHandler setupScriptVTable, SetupScriptObjectVTableHandler setupScriptObjectVTable)
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, SpawnHandler spawn, const ScriptingTypeHandle& baseType, SetupScriptVTableHandler setupScriptVTable, SetupScriptObjectVTableHandler setupScriptObjectVTable, const InterfaceImplementation* interfaces)
|
||||
: ManagedClass(nullptr)
|
||||
, Module(module)
|
||||
, InitRuntime(initRuntime)
|
||||
@@ -80,6 +81,7 @@ ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* modul
|
||||
, Type(ScriptingTypes::Script)
|
||||
, BaseTypeHandle(baseType)
|
||||
, BaseTypePtr(nullptr)
|
||||
, Interfaces(interfaces)
|
||||
, Size(size)
|
||||
{
|
||||
Script.Spawn = spawn;
|
||||
@@ -91,13 +93,14 @@ ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* modul
|
||||
Script.DefaultInstance = nullptr;
|
||||
}
|
||||
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, SpawnHandler spawn, ScriptingTypeInitializer* baseType, SetupScriptVTableHandler setupScriptVTable, SetupScriptObjectVTableHandler setupScriptObjectVTable)
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, SpawnHandler spawn, ScriptingTypeInitializer* baseType, SetupScriptVTableHandler setupScriptVTable, SetupScriptObjectVTableHandler setupScriptObjectVTable, const InterfaceImplementation* interfaces)
|
||||
: ManagedClass(nullptr)
|
||||
, Module(module)
|
||||
, InitRuntime(initRuntime)
|
||||
, Fullname(fullname)
|
||||
, Type(ScriptingTypes::Script)
|
||||
, BaseTypePtr(baseType)
|
||||
, Interfaces(interfaces)
|
||||
, Size(size)
|
||||
{
|
||||
Script.Spawn = spawn;
|
||||
@@ -109,26 +112,28 @@ ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* modul
|
||||
Script.DefaultInstance = nullptr;
|
||||
}
|
||||
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, ScriptingTypeInitializer* baseType)
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, ScriptingTypeInitializer* baseType, const InterfaceImplementation* interfaces)
|
||||
: ManagedClass(nullptr)
|
||||
, Module(module)
|
||||
, InitRuntime(initRuntime)
|
||||
, Fullname(fullname)
|
||||
, Type(ScriptingTypes::Class)
|
||||
, BaseTypePtr(baseType)
|
||||
, Interfaces(interfaces)
|
||||
, Size(size)
|
||||
{
|
||||
Class.Ctor = ctor;
|
||||
Class.Dtor = dtor;
|
||||
}
|
||||
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, Copy copy, Box box, Unbox unbox, GetField getField, SetField setField, ScriptingTypeInitializer* baseType)
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, Copy copy, Box box, Unbox unbox, GetField getField, SetField setField, ScriptingTypeInitializer* baseType, const InterfaceImplementation* interfaces)
|
||||
: ManagedClass(nullptr)
|
||||
, Module(module)
|
||||
, InitRuntime(initRuntime)
|
||||
, Fullname(fullname)
|
||||
, Type(ScriptingTypes::Structure)
|
||||
, BaseTypePtr(baseType)
|
||||
, Interfaces(interfaces)
|
||||
, Size(size)
|
||||
{
|
||||
Struct.Ctor = ctor;
|
||||
@@ -140,6 +145,18 @@ ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* modul
|
||||
Struct.SetField = setField;
|
||||
}
|
||||
|
||||
ScriptingType::ScriptingType(const StringAnsiView& fullname, BinaryModule* module, InitRuntimeHandler initRuntime, ScriptingTypeInitializer* baseType, const InterfaceImplementation* interfaces)
|
||||
: ManagedClass(nullptr)
|
||||
, Module(module)
|
||||
, InitRuntime(initRuntime)
|
||||
, Fullname(fullname)
|
||||
, Type(ScriptingTypes::Interface)
|
||||
, BaseTypePtr(baseType)
|
||||
, Interfaces(interfaces)
|
||||
, Size(0)
|
||||
{
|
||||
}
|
||||
|
||||
ScriptingType::ScriptingType(const ScriptingType& other)
|
||||
: ManagedClass(other.ManagedClass)
|
||||
, Module(other.Module)
|
||||
@@ -148,6 +165,7 @@ ScriptingType::ScriptingType(const ScriptingType& other)
|
||||
, Type(other.Type)
|
||||
, BaseTypeHandle(other.BaseTypeHandle)
|
||||
, BaseTypePtr(other.BaseTypePtr)
|
||||
, Interfaces(other.Interfaces)
|
||||
, Size(other.Size)
|
||||
{
|
||||
switch (other.Type)
|
||||
@@ -176,6 +194,8 @@ ScriptingType::ScriptingType(const ScriptingType& other)
|
||||
break;
|
||||
case ScriptingTypes::Enum:
|
||||
break;
|
||||
case ScriptingTypes::Interface:
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
@@ -188,6 +208,7 @@ ScriptingType::ScriptingType(ScriptingType&& other)
|
||||
, Type(other.Type)
|
||||
, BaseTypeHandle(other.BaseTypeHandle)
|
||||
, BaseTypePtr(other.BaseTypePtr)
|
||||
, Interfaces(other.Interfaces)
|
||||
, Size(other.Size)
|
||||
{
|
||||
switch (other.Type)
|
||||
@@ -220,6 +241,8 @@ ScriptingType::ScriptingType(ScriptingType&& other)
|
||||
break;
|
||||
case ScriptingTypes::Enum:
|
||||
break;
|
||||
case ScriptingTypes::Interface:
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
@@ -240,6 +263,8 @@ ScriptingType::~ScriptingType()
|
||||
break;
|
||||
case ScriptingTypes::Enum:
|
||||
break;
|
||||
case ScriptingTypes::Interface:
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
@@ -269,16 +294,40 @@ ScriptingObject* ScriptingType::GetDefaultInstance() const
|
||||
return Script.DefaultInstance;
|
||||
}
|
||||
|
||||
const ScriptingType::InterfaceImplementation* ScriptingType::GetInterface(const ScriptingTypeInitializer* interfaceType) const
|
||||
{
|
||||
const InterfaceImplementation* interfaces = Interfaces;
|
||||
if (interfaces)
|
||||
{
|
||||
while (interfaces->InterfaceType)
|
||||
{
|
||||
if (interfaces->InterfaceType == interfaceType)
|
||||
return interfaces;
|
||||
interfaces++;
|
||||
}
|
||||
}
|
||||
if (BaseTypeHandle)
|
||||
{
|
||||
return BaseTypeHandle.GetType().GetInterface(interfaceType);
|
||||
}
|
||||
if (BaseTypePtr)
|
||||
{
|
||||
return BaseTypePtr->GetType().GetInterface(interfaceType);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
String ScriptingType::ToString() const
|
||||
{
|
||||
return String(Fullname.Get(), Fullname.Length());
|
||||
}
|
||||
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::SpawnHandler spawn, ScriptingTypeInitializer* baseType, ScriptingType::SetupScriptVTableHandler setupScriptVTable, ScriptingType::SetupScriptObjectVTableHandler setupScriptObjectVTable)
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::SpawnHandler spawn, ScriptingTypeInitializer* baseType, ScriptingType::SetupScriptVTableHandler setupScriptVTable, ScriptingType::SetupScriptObjectVTableHandler setupScriptObjectVTable, const ScriptingType::InterfaceImplementation* interfaces)
|
||||
: ScriptingTypeHandle(module, module->Types.Count())
|
||||
{
|
||||
// Script
|
||||
module->Types.AddUninitialized();
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, size, initRuntime, spawn, baseType, setupScriptVTable, setupScriptObjectVTable);
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, size, initRuntime, spawn, baseType, setupScriptVTable, setupScriptObjectVTable, interfaces);
|
||||
const MString typeName(fullname.Get(), fullname.Length());
|
||||
#if BUILD_DEBUG
|
||||
if (module->TypeNameToTypeIndex.ContainsKey(typeName))
|
||||
@@ -289,11 +338,12 @@ ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const S
|
||||
module->TypeNameToTypeIndex[typeName] = TypeIndex;
|
||||
}
|
||||
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingTypeInitializer* baseType)
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingTypeInitializer* baseType, const ScriptingType::InterfaceImplementation* interfaces)
|
||||
: ScriptingTypeHandle(module, module->Types.Count())
|
||||
{
|
||||
// Class
|
||||
module->Types.AddUninitialized();
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, size, initRuntime, ctor, dtor, baseType);
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, size, initRuntime, ctor, dtor, baseType, interfaces);
|
||||
const MString typeName(fullname.Get(), fullname.Length());
|
||||
#if BUILD_DEBUG
|
||||
if (module->TypeNameToTypeIndex.ContainsKey(typeName))
|
||||
@@ -304,11 +354,28 @@ ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const S
|
||||
module->TypeNameToTypeIndex[typeName] = TypeIndex;
|
||||
}
|
||||
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingType::Copy copy, ScriptingType::Box box, ScriptingType::Unbox unbox, ScriptingType::GetField getField, ScriptingType::SetField setField, ScriptingTypeInitializer* baseType)
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingType::Copy copy, ScriptingType::Box box, ScriptingType::Unbox unbox, ScriptingType::GetField getField, ScriptingType::SetField setField, ScriptingTypeInitializer* baseType, const ScriptingType::InterfaceImplementation* interfaces)
|
||||
: ScriptingTypeHandle(module, module->Types.Count())
|
||||
{
|
||||
// Structure
|
||||
module->Types.AddUninitialized();
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, size, initRuntime, ctor, dtor, copy, box, unbox, getField, setField, baseType);
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, size, initRuntime, ctor, dtor, copy, box, unbox, getField, setField, baseType, interfaces);
|
||||
const MString typeName(fullname.Get(), fullname.Length());
|
||||
#if BUILD_DEBUG
|
||||
if (module->TypeNameToTypeIndex.ContainsKey(typeName))
|
||||
{
|
||||
LOG(Error, "Duplicated native typename {0} from module {1}.", String(fullname), String(module->GetName()));
|
||||
}
|
||||
#endif
|
||||
module->TypeNameToTypeIndex[typeName] = TypeIndex;
|
||||
}
|
||||
|
||||
ScriptingTypeInitializer::ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, ScriptingType::InitRuntimeHandler initRuntime, ScriptingTypeInitializer* baseType, const ScriptingType::InterfaceImplementation* interfaces)
|
||||
: ScriptingTypeHandle(module, module->Types.Count())
|
||||
{
|
||||
// Interface
|
||||
module->Types.AddUninitialized();
|
||||
new(module->Types.Get() + TypeIndex)ScriptingType(fullname, module, initRuntime, baseType, interfaces);
|
||||
const MString typeName(fullname.Get(), fullname.Length());
|
||||
#if BUILD_DEBUG
|
||||
if (module->TypeNameToTypeIndex.ContainsKey(typeName))
|
||||
|
||||
@@ -97,6 +97,7 @@ enum class ScriptingTypes
|
||||
Structure = 1,
|
||||
Enum = 2,
|
||||
Class = 3,
|
||||
Interface = 4,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
@@ -116,6 +117,15 @@ struct FLAXENGINE_API ScriptingType
|
||||
typedef void (*GetField)(void* ptr, const String& name, Variant& value);
|
||||
typedef void (*SetField)(void* ptr, const String& name, const Variant& value);
|
||||
|
||||
struct InterfaceImplementation
|
||||
{
|
||||
// Pointer to the type of the implemented interface.
|
||||
const ScriptingTypeInitializer* InterfaceType;
|
||||
|
||||
// The offset (in bytes) from the object pointer to the interface implementation. Used for casting object to the interface.
|
||||
int16 VTableOffset;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// The managed class (cached, can be null if missing).
|
||||
/// </summary>
|
||||
@@ -151,6 +161,11 @@ struct FLAXENGINE_API ScriptingType
|
||||
/// </summary>
|
||||
const ScriptingTypeInitializer* BaseTypePtr;
|
||||
|
||||
/// <summary>
|
||||
/// The list of interfaces implemented by this type (null if unused, list ends with null entry).
|
||||
/// </summary>
|
||||
const InterfaceImplementation* Interfaces;
|
||||
|
||||
/// <summary>
|
||||
/// The native size of the type value (in bytes).
|
||||
/// </summary>
|
||||
@@ -196,15 +211,6 @@ struct FLAXENGINE_API ScriptingType
|
||||
mutable ScriptingObject* DefaultInstance;
|
||||
} Script;
|
||||
|
||||
struct
|
||||
{
|
||||
// Class constructor method pointer
|
||||
Ctor Ctor;
|
||||
|
||||
// Class destructor method pointer
|
||||
Dtor Dtor;
|
||||
} Class;
|
||||
|
||||
struct
|
||||
{
|
||||
// Structure constructor method pointer
|
||||
@@ -228,13 +234,23 @@ struct FLAXENGINE_API ScriptingType
|
||||
// Structure field value setter
|
||||
SetField SetField;
|
||||
} Struct;
|
||||
|
||||
struct
|
||||
{
|
||||
// Class constructor method pointer
|
||||
Ctor Ctor;
|
||||
|
||||
// Class destructor method pointer
|
||||
Dtor Dtor;
|
||||
} Class;
|
||||
};
|
||||
|
||||
ScriptingType();
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, SpawnHandler spawn, const ScriptingTypeHandle& baseType, SetupScriptVTableHandler setupScriptVTable = nullptr, SetupScriptObjectVTableHandler setupScriptObjectVTable = nullptr);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime = DefaultInitRuntime, SpawnHandler spawn = DefaultSpawn, ScriptingTypeInitializer* baseType = nullptr, SetupScriptVTableHandler setupScriptVTable = nullptr, SetupScriptObjectVTableHandler setupScriptObjectVTable = nullptr);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, ScriptingTypeInitializer* baseType);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, Copy copy, Box box, Unbox unbox, GetField getField, SetField setField, ScriptingTypeInitializer* baseType);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, SpawnHandler spawn, const ScriptingTypeHandle& baseType, SetupScriptVTableHandler setupScriptVTable = nullptr, SetupScriptObjectVTableHandler setupScriptObjectVTable = nullptr, const InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime = DefaultInitRuntime, SpawnHandler spawn = DefaultSpawn, ScriptingTypeInitializer* baseType = nullptr, SetupScriptVTableHandler setupScriptVTable = nullptr, SetupScriptObjectVTableHandler setupScriptObjectVTable = nullptr, const InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, ScriptingTypeInitializer* baseType, const InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, int32 size, InitRuntimeHandler initRuntime, Ctor ctor, Dtor dtor, Copy copy, Box box, Unbox unbox, GetField getField, SetField setField, ScriptingTypeInitializer* baseType, const InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingType(const StringAnsiView& fullname, BinaryModule* module, InitRuntimeHandler initRuntime, ScriptingTypeInitializer* baseType, const InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingType(const ScriptingType& other);
|
||||
ScriptingType(ScriptingType&& other);
|
||||
ScriptingType& operator=(ScriptingType&& other) = delete;
|
||||
@@ -270,6 +286,11 @@ struct FLAXENGINE_API ScriptingType
|
||||
/// </summary>
|
||||
ScriptingObject* GetDefaultInstance() const;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the pointer to the implementation of the given interface type for this scripting type (including base types). Returns null if given interface is not implemented.
|
||||
/// </summary>
|
||||
const InterfaceImplementation* GetInterface(const ScriptingTypeInitializer* interfaceType) const;
|
||||
|
||||
String ToString() const;
|
||||
};
|
||||
|
||||
@@ -278,9 +299,10 @@ struct FLAXENGINE_API ScriptingType
|
||||
/// </summary>
|
||||
struct FLAXENGINE_API ScriptingTypeInitializer : ScriptingTypeHandle
|
||||
{
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime = ScriptingType::DefaultInitRuntime, ScriptingType::SpawnHandler spawn = ScriptingType::DefaultSpawn, ScriptingTypeInitializer* baseType = nullptr, ScriptingType::SetupScriptVTableHandler setupScriptVTable = nullptr, ScriptingType::SetupScriptObjectVTableHandler setupScriptObjectVTable = nullptr);
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingTypeInitializer* baseType = nullptr);
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingType::Copy copy, ScriptingType::Box box, ScriptingType::Unbox unbox, ScriptingType::GetField getField, ScriptingType::SetField setField, ScriptingTypeInitializer* baseType = nullptr);
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime = ScriptingType::DefaultInitRuntime, ScriptingType::SpawnHandler spawn = ScriptingType::DefaultSpawn, ScriptingTypeInitializer* baseType = nullptr, ScriptingType::SetupScriptVTableHandler setupScriptVTable = nullptr, ScriptingType::SetupScriptObjectVTableHandler setupScriptObjectVTable = nullptr, const ScriptingType::InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingTypeInitializer* baseType = nullptr, const ScriptingType::InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, int32 size, ScriptingType::InitRuntimeHandler initRuntime, ScriptingType::Ctor ctor, ScriptingType::Dtor dtor, ScriptingType::Copy copy, ScriptingType::Box box, ScriptingType::Unbox unbox, ScriptingType::GetField getField, ScriptingType::SetField setField, ScriptingTypeInitializer* baseType = nullptr, const ScriptingType::InterfaceImplementation* interfaces = nullptr);
|
||||
ScriptingTypeInitializer(BinaryModule* module, const StringAnsiView& fullname, ScriptingType::InitRuntimeHandler initRuntime, ScriptingTypeInitializer* baseType = nullptr, const ScriptingType::InterfaceImplementation* interfaces = nullptr);
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user