diff --git a/TestPlugin/lang/TestPlugin_zh_CN.ts b/TestPlugin/lang/TestPlugin_zh_CN.ts
index f9fa955..3f25f62 100644
--- a/TestPlugin/lang/TestPlugin_zh_CN.ts
+++ b/TestPlugin/lang/TestPlugin_zh_CN.ts
@@ -306,12 +306,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
InvalidParamsCount
无效参数个数
@@ -322,7 +322,7 @@
非法参数
-
+
AllocArrayFailed
分配数组失败
diff --git a/TestPlugin/testplugin.cpp b/TestPlugin/testplugin.cpp
index 3db12b7..3963e78 100644
--- a/TestPlugin/testplugin.cpp
+++ b/TestPlugin/testplugin.cpp
@@ -263,7 +263,7 @@ WingHex::UNSAFE_RET TestPlugin::colorTable(const QList ¶ms) {
void *array = nullptr;
QVector colors;
for (auto &c : colorTable()) {
- colors.append(new QColor(c));
+ colors.append(&c);
}
auto invoked =
@@ -271,7 +271,6 @@ WingHex::UNSAFE_RET TestPlugin::colorTable(const QList ¶ms) {
qReturnArg(array), WingHex::MetaType::Meta_Color, colors);
if (invoked) {
if (array) {
- qDeleteAll(colors);
return array;
}
}
diff --git a/lang/zh_CN/winghex_zh_CN.ts b/lang/zh_CN/winghex_zh_CN.ts
index 7712af6..1f710e9 100644
--- a/lang/zh_CN/winghex_zh_CN.ts
+++ b/lang/zh_CN/winghex_zh_CN.ts
@@ -5467,18 +5467,18 @@
为 AngelScript 脚本提供调用主机 API 能力的内部插件。
-
+
NotSupportedQMetaType:
不支持的 QT 数据元类型:
-
-
+
+
Get Exception While ScriptCall: (%1) %2
脚本调用发生异常:(%1)%2
-
+
InvalidRetType: need
无效返回值:需要
diff --git a/lang/zh_TW/winghex_zh_TW.ts b/lang/zh_TW/winghex_zh_TW.ts
index 5525bf5..4906916 100644
--- a/lang/zh_TW/winghex_zh_TW.ts
+++ b/lang/zh_TW/winghex_zh_TW.ts
@@ -5467,18 +5467,18 @@
為 AngelScript 腳本提供調用主機 API 能力的內部插件。
-
+
NotSupportedQMetaType:
不支持的 QT 數據元類型:
-
-
+
+
Get Exception While ScriptCall: (%1) %2
腳本調用發生異常:(%1)%2
-
+
InvalidRetType: need
無效返回值:需要
diff --git a/src/class/pluginsystem.cpp b/src/class/pluginsystem.cpp
index 55f2fdf..7cecfe2 100644
--- a/src/class/pluginsystem.cpp
+++ b/src/class/pluginsystem.cpp
@@ -600,7 +600,7 @@ bool PluginSystem::invokeServiceImpl(const QObject *sender, const QString &puid,
if (met.name() == method) {
bool err = false;
for (int i = 1; i < paramCount; ++i) {
- if (met.parameterType(i) != metaTypes[i]->typeId) {
+ if (met.parameterTypeName(i).compare(metaTypes[i]->name)) {
err = true;
break;
}
diff --git a/src/class/wingangelapi.cpp b/src/class/wingangelapi.cpp
index fd1c6fa..c4e8a86 100644
--- a/src/class/wingangelapi.cpp
+++ b/src/class/wingangelapi.cpp
@@ -1061,12 +1061,10 @@ QStringList WingAngelAPI::cArray2QStringList(const CScriptArray &array,
QStringList buffer;
buffer.reserve(array.GetSize());
- array.AddRef();
for (asUINT i = 0; i < array.GetSize(); ++i) {
auto item = reinterpret_cast(array.At(i));
buffer.append(*item);
}
- array.Release();
return buffer;
}
@@ -1217,9 +1215,10 @@ void WingAngelAPI::qvariantCastOp(
assignTmpBuffer(buffer, var.toULongLong());
fn(&buffer, type);
break;
- case QMetaType::QChar:
- fn(new QChar(var.toChar()), type);
- break;
+ case QMetaType::QChar: {
+ auto obj = var.toChar();
+ fn(&obj, type);
+ } break;
case QMetaType::Float:
assignTmpBuffer(buffer, var.toULongLong());
fn(&buffer, type);
@@ -1229,21 +1228,24 @@ void WingAngelAPI::qvariantCastOp(
fn(&buffer, type);
break;
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
- case QMetaType::Char16:
- fn(new QChar(var.value()), type);
- break;
- case QMetaType::Char32:
- fn(new QChar(var.value()), type);
- break;
+ case QMetaType::Char16: {
+ auto obj = QChar(var.value());
+ fn(&obj, type);
+ } break;
+ case QMetaType::Char32: {
+ auto obj = QChar(var.value());
+ fn(&obj, type);
+ } break;
#endif
case QMetaType::UChar:
case QMetaType::SChar:
case QMetaType::Char:
assignTmpBuffer(buffer, var.value());
break;
- case QMetaType::QString:
- fn(new QString(var.toString()), type);
- break;
+ case QMetaType::QString: {
+ auto obj = var.toString();
+ fn(&obj, type);
+ } break;
case QMetaType::QByteArray: {
auto value = var.toByteArray();
auto info = engine->GetTypeInfoByDecl("array");
@@ -1298,9 +1300,10 @@ void WingAngelAPI::qvariantCastOp(
fn(arr, type);
arr->Release();
} break;
- case QMetaType::QColor:
- fn(new QColor(var.value()), type);
- break;
+ case QMetaType::QColor: {
+ auto obj = var.value();
+ fn(&obj, type);
+ } break;
case QMetaType::Void:
break;
default:
@@ -2000,7 +2003,9 @@ void *WingAngelAPI::vector2AsArray(const WingHex::SenderInfo &sender,
if (info) {
auto len = content.length();
auto arr = CScriptArray::Create(info, len);
- std::memcpy(arr->GetBuffer(), content.data(), len);
+ for (int i = 0; i < len; ++i) {
+ arr->SetValue(i, content.at(i));
+ }
return arr;
}
return nullptr;
@@ -2009,37 +2014,8 @@ void *WingAngelAPI::vector2AsArray(const WingHex::SenderInfo &sender,
void *WingAngelAPI::list2AsArray(const WingHex::SenderInfo &sender,
WingHex::MetaType type,
const QList &content) {
-#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
static_assert(std::is_same_v, QVector>);
return vector2AsArray(sender, type, content);
-#else
- Q_UNUSED(sender);
- auto typeStr = type2AngelScriptString(MetaType(type | MetaType::Meta_Array),
- false, true);
- if (typeStr.isEmpty()) {
- return nullptr;
- }
-
- auto engine = ScriptMachine::instance().engine();
- auto info = engine->GetTypeInfoByDecl(typeStr.toUtf8());
- if (info) {
- auto len = content.length();
- auto arr = CScriptArray::Create(info, len);
- for (decltype(len) i = 0; i < len; ++i) {
- arr->SetValue(i, content.at(i));
- }
- return arr;
- }
- return nullptr;
-#endif
-}
-
-void WingAngelAPI::deleteAsArray(const WingHex::SenderInfo &sender,
- void *array) {
- Q_UNUSED(sender);
- if (array) {
- reinterpret_cast(array)->Release();
- }
}
void *WingAngelAPI::newAsDictionary(
@@ -2063,14 +2039,6 @@ void *WingAngelAPI::newAsDictionary(
return dic;
}
-void WingAngelAPI::deleteAsDictionary(const WingHex::SenderInfo &sender,
- void *dic) {
- Q_UNUSED(sender);
- if (dic) {
- reinterpret_cast(dic)->Release();
- }
-}
-
void WingAngelAPI::cleanUpHandles(const QVector &handles) {
for (auto &h : _handles) {
if (!handles.contains(h)) {
diff --git a/src/class/wingangelapi.h b/src/class/wingangelapi.h
index 01c2cd0..75e9b68 100644
--- a/src/class/wingangelapi.h
+++ b/src/class/wingangelapi.h
@@ -175,14 +175,10 @@ private:
WING_SERVICE void *list2AsArray(const WingHex::SenderInfo &sender,
WingHex::MetaType type,
const QList &content);
- WING_SERVICE void deleteAsArray(const WingHex::SenderInfo &sender,
- void *array);
WING_SERVICE void *newAsDictionary(
const WingHex::SenderInfo &sender,
const QHash> &content);
- WING_SERVICE void deleteAsDictionary(const WingHex::SenderInfo &sender,
- void *dic);
// =========================================================