大漠插件(二、Qt使用插件时注意事项)
本章目的
在上篇已经注册完毕大漠,那么怎么使用大漠来制作脚本,我选择了我最熟悉的Qt来开发,毕竟只是小软件,用脚本或者c++都差不了多少。本章就是开发途中的一些坑。
本人开发环境是 win11 64、Qt 5.15.2安装了5.10.0的msvc2015 32开发套件、vs2022安装了v143开发套件。
开发的坑
一 、使用32位开发套件
64位是不行的,必须使用32位开发套件 。否则会报错失败。我的32位环境就是上面的那些。
二、Qt使用ActiveX时的设置
在工程的pro文件中的 QT+= 后面加上 axcontainer,否则会报错“找不到 qaxobject.h”
三、生成dm的头文件和cpp文件
在Qt路径下,根据你的开发套件版本找 dumpcpp.exe。我装的是 5.10.0 的 msvc2015 32。所以我的路径是“C:\all\Qt\5.10.0\msvc2015\bin”。
在 dumpcpp.exe 目录下运行 cmd 。
dumpcpp.exe C:\all\freeDM3.1233\dm.dll
将路径换成你的dm.dll 路径。运行此命令后,在 dumpcpp.exe 目录下会生成 dm.h、dm.cpp 两个文件。我们开发时就需要使用这两个文件。
四、C3615 constexpr 函数“qCountLeadingZeroBits”不能生成常量表达式
我们需要修改 qalgorithms.h 。 此处参考了别人的文章。
因为我用的是 Qt 的msvc2015 开发套件,所以我的路径是 “C:\all\Qt\5.10.0\msvc2015\include\QtCore ”。在这里找到 qalgorithms.h。
加入两行代码,修改四处即可。
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint16 v) Q_DECL_NOTHROW
{return __builtin_popcount(v);
}
#define QALGORITHMS_USE_BUILTIN_POPCOUNTLL
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NOTHROW
{return __builtin_popcountll(v);
}
#elif defined(Q_CC_MSVC) && !defined(Q_OS_WINCE) && !defined(Q_PROCESSOR_ARM)
#define QT_POPCOUNT_CONSTEXPR
#define QT_POPCOUNT_RELAXED_CONSTEXPR //增加的
#define QT_HAS_BUILTIN_CTZ
Q_ALWAYS_INLINE unsigned long qt_builtin_ctz(quint32 val)
{unsigned long result;_BitScanForward(&result, val);return result;
}
#define QT_HAS_BUILTIN_CLZ
Q_ALWAYS_INLINE unsigned long qt_builtin_clz(quint32 val)
{unsigned long result;_BitScanReverse(&result, val);
#if Q_PROCESSOR_WORDSIZE == 8
#define QALGORITHMS_USE_BUILTIN_POPCOUNTLL
Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NOTHROW
{return __popcnt64(v);
}
#endif // MSVC 64bit
#endif // __AVX__ || __SSE4_2__ || __POPCNT__#endif // MSVC
#endif // QT_HAS_CONSTEXPR_BUILTINS#ifndef QT_POPCOUNT_CONSTEXPR
#define QT_POPCOUNT_CONSTEXPR Q_DECL_CONSTEXPR
#define QT_POPCOUNT_RELAXED_CONSTEXPR Q_DECL_RELAXED_CONSTEXPR //增加的
#endif} //namespace QAlgorithmsPrivateQ_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint32 v) Q_DECL_NOTHROW
{
#ifdef QALGORITHMS_USE_BUILTIN_POPCOUNTreturn QAlgorithmsPrivate::qt_builtin_popcount(v);
#else// See http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallelreturn(((v ) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +
Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint64 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CTZLL)return v ? QAlgorithmsPrivate::qt_builtin_ctzll(v) : 64;
#elsequint32 x = static_cast<quint32>(v);return x ? qCountTrailingZeroBits(x): 32 + qCountTrailingZeroBits(static_cast<quint32>(v >> 32));
#endif
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(unsigned long v) Q_DECL_NOTHROW
{return qCountTrailingZeroBits(QIntegerForSizeof<long>::Unsigned(v));
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint32 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZ)return v ? QAlgorithmsPrivate::qt_builtin_clz(v) : 32U;
#else// Hacker's Delight, 2nd ed. Fig 5-16, p. 102v = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);v = v | (v >> 8);v = v | (v >> 16);return qPopulationCount(~v);
#endif
}//改为 QT_POPCOUNT_RELAXED_CONSTEXPR
QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint8 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZ)return v ? QAlgorithmsPrivate::qt_builtin_clz(v)-24U : 8U;
#elsev = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);return qPopulationCount(static_cast<quint8>(~v));
#endif
}//改为 QT_POPCOUNT_RELAXED_CONSTEXPR
QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint16 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZS)return v ? QAlgorithmsPrivate::qt_builtin_clzs(v) : 16U;
#elsev = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);v = v | (v >> 8);return qPopulationCount(static_cast<quint16>(~v));
#endif
}//改为 QT_POPCOUNT_RELAXED_CONSTEXPR
QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint64 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZLL)return v ? QAlgorithmsPrivate::qt_builtin_clzll(v) : 64U;
#elsev = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);v = v | (v >> 8);v = v | (v >> 16);v = v | (v >> 32);return qPopulationCount(~v);
#endif
}//改为 QT_POPCOUNT_RELAXED_CONSTEXPR
QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(unsigned long v) Q_DECL_NOTHROW
{return qCountLeadingZeroBits(QIntegerForSizeof<long>::Unsigned(v));
}QT_WARNING_POP
QT_END_NAMESPACE#endif // QALGORITHMS_H
修改完后的文件
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/#ifndef QALGORITHMS_H
#define QALGORITHMS_H#include <QtCore/qglobal.h>#if defined(Q_CC_MSVC) && _MSC_VER > 1500
#include <intrin.h>
#endifQT_BEGIN_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED/*Warning: The contents of QAlgorithmsPrivate is not a part of the public Qt APIand may be changed from version to version or even be completely removed.
*/
namespace QAlgorithmsPrivate {#if QT_DEPRECATED_SINCE(5, 2)
template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::sort") Q_OUTOFLINE_TEMPLATE void qSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan);
template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::sort") inline void qSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy);template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::stable_sort") Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan);
template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::stable_sort") inline void qStableSortHelper(RandomAccessIterator, RandomAccessIterator, const T &);template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::lower_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::upper_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::binary_search") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan);
#endif // QT_DEPRECATED_SINCE(5, 2)}#if QT_DEPRECATED_SINCE(5, 2)
template <typename InputIterator, typename OutputIterator>
QT_DEPRECATED_X("Use std::copy") inline OutputIterator qCopy(InputIterator begin, InputIterator end, OutputIterator dest)
{while (begin != end)*dest++ = *begin++;return dest;
}template <typename BiIterator1, typename BiIterator2>
QT_DEPRECATED_X("Use std::copy_backward") inline BiIterator2 qCopyBackward(BiIterator1 begin, BiIterator1 end, BiIterator2 dest)
{while (begin != end)*--dest = *--end;return dest;
}template <typename InputIterator1, typename InputIterator2>
QT_DEPRECATED_X("Use std::equal") inline bool qEqual(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2)
{for (; first1 != last1; ++first1, ++first2)if (!(*first1 == *first2))return false;return true;
}template <typename ForwardIterator, typename T>
QT_DEPRECATED_X("Use std::fill") inline void qFill(ForwardIterator first, ForwardIterator last, const T &val)
{for (; first != last; ++first)*first = val;
}template <typename Container, typename T>
QT_DEPRECATED_X("Use std::fill") inline void qFill(Container &container, const T &val)
{qFill(container.begin(), container.end(), val);
}template <typename InputIterator, typename T>
QT_DEPRECATED_X("Use std::find") inline InputIterator qFind(InputIterator first, InputIterator last, const T &val)
{while (first != last && !(*first == val))++first;return first;
}template <typename Container, typename T>
QT_DEPRECATED_X("Use std::find") inline typename Container::const_iterator qFind(const Container &container, const T &val)
{return qFind(container.constBegin(), container.constEnd(), val);
}template <typename InputIterator, typename T, typename Size>
QT_DEPRECATED_X("Use std::count") inline void qCount(InputIterator first, InputIterator last, const T &value, Size &n)
{for (; first != last; ++first)if (*first == value)++n;
}template <typename Container, typename T, typename Size>
QT_DEPRECATED_X("Use std::count") inline void qCount(const Container &container, const T &value, Size &n)
{qCount(container.constBegin(), container.constEnd(), value, n);
}#ifdef Q_QDOC
typedef void* LessThan;
template <typename T> LessThan qLess();
template <typename T> LessThan qGreater();
#else
template <typename T>
class QT_DEPRECATED_X("Use std::less") qLess
{
public:inline bool operator()(const T &t1, const T &t2) const{return (t1 < t2);}
};template <typename T>
class QT_DEPRECATED_X("Use std::greater") qGreater
{
public:inline bool operator()(const T &t1, const T &t2) const{return (t2 < t1);}
};
#endiftemplate <typename RandomAccessIterator>
QT_DEPRECATED_X("Use std::sort") inline void qSort(RandomAccessIterator start, RandomAccessIterator end)
{if (start != end)QAlgorithmsPrivate::qSortHelper(start, end, *start);
}template <typename RandomAccessIterator, typename LessThan>
QT_DEPRECATED_X("Use std::sort") inline void qSort(RandomAccessIterator start, RandomAccessIterator end, LessThan lessThan)
{if (start != end)QAlgorithmsPrivate::qSortHelper(start, end, *start, lessThan);
}template<typename Container>
QT_DEPRECATED_X("Use std::sort") inline void qSort(Container &c)
{
#ifdef Q_CC_BOR// Work around Borland 5.5 optimizer bugc.detach();
#endifif (!c.empty())QAlgorithmsPrivate::qSortHelper(c.begin(), c.end(), *c.begin());
}template <typename RandomAccessIterator>
QT_DEPRECATED_X("Use std::stable_sort") inline void qStableSort(RandomAccessIterator start, RandomAccessIterator end)
{if (start != end)QAlgorithmsPrivate::qStableSortHelper(start, end, *start);
}template <typename RandomAccessIterator, typename LessThan>
QT_DEPRECATED_X("Use std::stable_sort") inline void qStableSort(RandomAccessIterator start, RandomAccessIterator end, LessThan lessThan)
{if (start != end)QAlgorithmsPrivate::qStableSortHelper(start, end, *start, lessThan);
}template<typename Container>
QT_DEPRECATED_X("Use std::stable_sort") inline void qStableSort(Container &c)
{
#ifdef Q_CC_BOR// Work around Borland 5.5 optimizer bugc.detach();
#endifif (!c.empty())QAlgorithmsPrivate::qStableSortHelper(c.begin(), c.end(), *c.begin());
}template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::lower_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
{// Implementation is duplicated from QAlgorithmsPrivate to keep existing code// compiling. We have to allow using *begin and value with different types,// and then implementing operator< for those types.RandomAccessIterator middle;int n = end - begin;int half;while (n > 0) {half = n >> 1;middle = begin + half;if (*middle < value) {begin = middle + 1;n -= half + 1;} else {n = half;}}return begin;
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::lower_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{return QAlgorithmsPrivate::qLowerBoundHelper(begin, end, value, lessThan);
}template <typename Container, typename T>
QT_DEPRECATED_X("Use std::lower_bound") Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qLowerBound(const Container &container, const T &value)
{return QAlgorithmsPrivate::qLowerBoundHelper(container.constBegin(), container.constEnd(), value, qLess<T>());
}template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::upper_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
{// Implementation is duplicated from QAlgorithmsPrivate.RandomAccessIterator middle;int n = end - begin;int half;while (n > 0) {half = n >> 1;middle = begin + half;if (value < *middle) {n = half;} else {begin = middle + 1;n -= half + 1;}}return begin;
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::upper_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{return QAlgorithmsPrivate::qUpperBoundHelper(begin, end, value, lessThan);
}template <typename Container, typename T>
QT_DEPRECATED_X("Use std::upper_bound") Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qUpperBound(const Container &container, const T &value)
{return QAlgorithmsPrivate::qUpperBoundHelper(container.constBegin(), container.constEnd(), value, qLess<T>());
}template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::binary_search") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
{// Implementation is duplicated from QAlgorithmsPrivate.RandomAccessIterator it = qLowerBound(begin, end, value);if (it == end || value < *it)return end;return it;
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::binary_search") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{return QAlgorithmsPrivate::qBinaryFindHelper(begin, end, value, lessThan);
}template <typename Container, typename T>
QT_DEPRECATED_X("Use std::binary_search") Q_OUTOFLINE_TEMPLATE typename Container::const_iterator qBinaryFind(const Container &container, const T &value)
{return QAlgorithmsPrivate::qBinaryFindHelper(container.constBegin(), container.constEnd(), value, qLess<T>());
}
#endif // QT_DEPRECATED_SINCE(5, 2)template <typename ForwardIterator>
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
{while (begin != end) {delete *begin;++begin;}
}template <typename Container>
inline void qDeleteAll(const Container &c)
{qDeleteAll(c.begin(), c.end());
}/*Warning: The contents of QAlgorithmsPrivate is not a part of the public Qt APIand may be changed from version to version or even be completely removed.
*/
namespace QAlgorithmsPrivate {#if QT_DEPRECATED_SINCE(5, 2)template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::sort") Q_OUTOFLINE_TEMPLATE void qSortHelper(RandomAccessIterator start, RandomAccessIterator end, const T &t, LessThan lessThan)
{
top:int span = int(end - start);if (span < 2)return;--end;RandomAccessIterator low = start, high = end - 1;RandomAccessIterator pivot = start + span / 2;if (lessThan(*end, *start))qSwap(*end, *start);if (span == 2)return;if (lessThan(*pivot, *start))qSwap(*pivot, *start);if (lessThan(*end, *pivot))qSwap(*end, *pivot);if (span == 3)return;qSwap(*pivot, *end);while (low < high) {while (low < high && lessThan(*low, *end))++low;while (high > low && lessThan(*end, *high))--high;if (low < high) {qSwap(*low, *high);++low;--high;} else {break;}}if (lessThan(*low, *end))++low;qSwap(*end, *low);qSortHelper(start, low, t, lessThan);start = low + 1;++end;goto top;
}template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::sort") inline void qSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy)
{qSortHelper(begin, end, dummy, qLess<T>());
}template <typename RandomAccessIterator>
QT_DEPRECATED_X("Use std::reverse") Q_OUTOFLINE_TEMPLATE void qReverse(RandomAccessIterator begin, RandomAccessIterator end)
{--end;while (begin < end)qSwap(*begin++, *end--);
}template <typename RandomAccessIterator>
QT_DEPRECATED_X("Use std::rotate") Q_OUTOFLINE_TEMPLATE void qRotate(RandomAccessIterator begin, RandomAccessIterator middle, RandomAccessIterator end)
{qReverse(begin, middle);qReverse(middle, end);qReverse(begin, end);
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::merge") Q_OUTOFLINE_TEMPLATE void qMerge(RandomAccessIterator begin, RandomAccessIterator pivot, RandomAccessIterator end, T &t, LessThan lessThan)
{const int len1 = pivot - begin;const int len2 = end - pivot;if (len1 == 0 || len2 == 0)return;if (len1 + len2 == 2) {if (lessThan(*(begin + 1), *(begin)))qSwap(*begin, *(begin + 1));return;}RandomAccessIterator firstCut;RandomAccessIterator secondCut;int len2Half;if (len1 > len2) {const int len1Half = len1 / 2;firstCut = begin + len1Half;secondCut = qLowerBound(pivot, end, *firstCut, lessThan);len2Half = secondCut - pivot;} else {len2Half = len2 / 2;secondCut = pivot + len2Half;firstCut = qUpperBound(begin, pivot, *secondCut, lessThan);}qRotate(firstCut, pivot, secondCut);const RandomAccessIterator newPivot = firstCut + len2Half;qMerge(begin, firstCut, newPivot, t, lessThan);qMerge(newPivot, secondCut, end, t, lessThan);
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::stable_sort") Q_OUTOFLINE_TEMPLATE void qStableSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &t, LessThan lessThan)
{const int span = end - begin;if (span < 2)return;const RandomAccessIterator middle = begin + span / 2;qStableSortHelper(begin, middle, t, lessThan);qStableSortHelper(middle, end, t, lessThan);qMerge(begin, middle, end, t, lessThan);
}template <typename RandomAccessIterator, typename T>
QT_DEPRECATED_X("Use std::stable_sort") inline void qStableSortHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &dummy)
{qStableSortHelper(begin, end, dummy, qLess<T>());
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::lower_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qLowerBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{RandomAccessIterator middle;int n = int(end - begin);int half;while (n > 0) {half = n >> 1;middle = begin + half;if (lessThan(*middle, value)) {begin = middle + 1;n -= half + 1;} else {n = half;}}return begin;
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::upper_bound") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qUpperBoundHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{RandomAccessIterator middle;int n = end - begin;int half;while (n > 0) {half = n >> 1;middle = begin + half;if (lessThan(value, *middle)) {n = half;} else {begin = middle + 1;n -= half + 1;}}return begin;
}template <typename RandomAccessIterator, typename T, typename LessThan>
QT_DEPRECATED_X("Use std::binary_search") Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
{RandomAccessIterator it = qLowerBoundHelper(begin, end, value, lessThan);if (it == end || lessThan(value, *it))return end;return it;
}#endif // QT_DEPRECATED_SINCE(5, 2)#ifdef Q_CC_CLANG
// Clang had a bug where __builtin_ctz/clz/popcount were not marked as constexpr.
# if (defined __apple_build_version__ && __clang_major__ >= 7) || (Q_CC_CLANG >= 307)
# define QT_HAS_CONSTEXPR_BUILTINS
# endif
#elif defined(Q_CC_MSVC) && !defined(Q_CC_INTEL) && !defined(Q_OS_WINCE) && !defined(Q_PROCESSOR_ARM)
# define QT_HAS_CONSTEXPR_BUILTINS
#elif defined(Q_CC_GNU)
# define QT_HAS_CONSTEXPR_BUILTINS
#endif#if defined QT_HAS_CONSTEXPR_BUILTINS
#if defined(Q_CC_GNU) || defined(Q_CC_CLANG)
# define QT_HAS_BUILTIN_CTZS
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_ctzs(quint16 v) Q_DECL_NOTHROW
{
# if QT_HAS_BUILTIN(__builtin_ctzs)return __builtin_ctzs(v);
# elsereturn __builtin_ctz(v);
# endif
}
#define QT_HAS_BUILTIN_CLZS
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_clzs(quint16 v) Q_DECL_NOTHROW
{
# if QT_HAS_BUILTIN(__builtin_clzs)return __builtin_clzs(v);
# elsereturn __builtin_clz(v) - 16U;
# endif
}
#define QT_HAS_BUILTIN_CTZ
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_ctz(quint32 v) Q_DECL_NOTHROW
{return __builtin_ctz(v);
}
#define QT_HAS_BUILTIN_CLZ
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_clz(quint32 v) Q_DECL_NOTHROW
{return __builtin_clz(v);
}
#define QT_HAS_BUILTIN_CTZLL
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_ctzll(quint64 v) Q_DECL_NOTHROW
{return __builtin_ctzll(v);
}
#define QT_HAS_BUILTIN_CLZLL
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_clzll(quint64 v) Q_DECL_NOTHROW
{return __builtin_clzll(v);
}
#define QALGORITHMS_USE_BUILTIN_POPCOUNT
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint32 v) Q_DECL_NOTHROW
{return __builtin_popcount(v);
}
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint8 v) Q_DECL_NOTHROW
{return __builtin_popcount(v);
}
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint16 v) Q_DECL_NOTHROW
{return __builtin_popcount(v);
}
#define QALGORITHMS_USE_BUILTIN_POPCOUNTLL
Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NOTHROW
{return __builtin_popcountll(v);
}
#elif defined(Q_CC_MSVC) && !defined(Q_OS_WINCE) && !defined(Q_PROCESSOR_ARM)
#define QT_POPCOUNT_CONSTEXPR
#define QT_POPCOUNT_RELAXED_CONSTEXPR
#define QT_HAS_BUILTIN_CTZ
Q_ALWAYS_INLINE unsigned long qt_builtin_ctz(quint32 val)
{unsigned long result;_BitScanForward(&result, val);return result;
}
#define QT_HAS_BUILTIN_CLZ
Q_ALWAYS_INLINE unsigned long qt_builtin_clz(quint32 val)
{unsigned long result;_BitScanReverse(&result, val);// Now Invert the result: clz will count *down* from the msb to the lsb, so the msb index is 31// and the lsb index is 0. The result for the index when counting up: msb index is 0 (because it// starts there), and the lsb index is 31.result ^= sizeof(quint32) * 8 - 1;return result;
}
#if Q_PROCESSOR_WORDSIZE == 8
// These are only defined for 64bit builds.
#define QT_HAS_BUILTIN_CTZLL
Q_ALWAYS_INLINE unsigned long qt_builtin_ctzll(quint64 val)
{unsigned long result;_BitScanForward64(&result, val);return result;
}
// MSVC calls it _BitScanReverse and returns the carry flag, which we don't need
#define QT_HAS_BUILTIN_CLZLL
Q_ALWAYS_INLINE unsigned long qt_builtin_clzll(quint64 val)
{unsigned long result;_BitScanReverse64(&result, val);// see qt_builtin_clzresult ^= sizeof(quint64) * 8 - 1;return result;
}
#endif // MSVC 64bit
# define QT_HAS_BUILTIN_CTZS
Q_ALWAYS_INLINE uint qt_builtin_ctzs(quint16 v) Q_DECL_NOTHROW
{return qt_builtin_ctz(v);
}
#define QT_HAS_BUILTIN_CLZS
Q_ALWAYS_INLINE uint qt_builtin_clzs(quint16 v) Q_DECL_NOTHROW
{return qt_builtin_clz(v) - 16U;
}// Neither MSVC nor the Intel compiler define a macro for the POPCNT processor
// feature, so we're using either the SSE4.2 or the AVX macro as a proxy (Clang
// does define the macro). It's incorrect for two reasons:
// 1. It's a separate bit in CPUID, so a processor could implement SSE4.2 and
// not POPCNT, but that's unlikely to happen.
// 2. There are processors that support POPCNT but not AVX (Intel Nehalem
// architecture), but unlike the other compilers, MSVC has no option
// to generate code for those processors.
// So it's an acceptable compromise.
#if defined(__AVX__) || defined(__SSE4_2__) || defined(__POPCNT__)
#define QALGORITHMS_USE_BUILTIN_POPCOUNT
Q_ALWAYS_INLINE uint qt_builtin_popcount(quint32 v) Q_DECL_NOTHROW
{return __popcnt(v);
}
Q_ALWAYS_INLINE uint qt_builtin_popcount(quint8 v) Q_DECL_NOTHROW
{return __popcnt16(v);
}
Q_ALWAYS_INLINE uint qt_builtin_popcount(quint16 v) Q_DECL_NOTHROW
{return __popcnt16(v);
}
#if Q_PROCESSOR_WORDSIZE == 8
#define QALGORITHMS_USE_BUILTIN_POPCOUNTLL
Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NOTHROW
{return __popcnt64(v);
}
#endif // MSVC 64bit
#endif // __AVX__ || __SSE4_2__ || __POPCNT__#endif // MSVC
#endif // QT_HAS_CONSTEXPR_BUILTINS#ifndef QT_POPCOUNT_CONSTEXPR
#define QT_POPCOUNT_CONSTEXPR Q_DECL_CONSTEXPR
#define QT_POPCOUNT_RELAXED_CONSTEXPR Q_DECL_RELAXED_CONSTEXPR
#endif} //namespace QAlgorithmsPrivateQ_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint32 v) Q_DECL_NOTHROW
{
#ifdef QALGORITHMS_USE_BUILTIN_POPCOUNTreturn QAlgorithmsPrivate::qt_builtin_popcount(v);
#else// See http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallelreturn(((v ) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 12) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 24) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f;
#endif
}Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint8 v) Q_DECL_NOTHROW
{
#ifdef QALGORITHMS_USE_BUILTIN_POPCOUNTreturn QAlgorithmsPrivate::qt_builtin_popcount(v);
#elsereturn(((v ) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f;
#endif
}Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint16 v) Q_DECL_NOTHROW
{
#ifdef QALGORITHMS_USE_BUILTIN_POPCOUNTreturn QAlgorithmsPrivate::qt_builtin_popcount(v);
#elsereturn(((v ) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 12) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f;
#endif
}Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint64 v) Q_DECL_NOTHROW
{
#ifdef QALGORITHMS_USE_BUILTIN_POPCOUNTLLreturn QAlgorithmsPrivate::qt_builtin_popcountll(v);
#elsereturn(((v ) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 12) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 24) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 36) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 48) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +(((v >> 60) & 0xfff) * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f;
#endif
}Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(long unsigned int v) Q_DECL_NOTHROW
{return qPopulationCount(static_cast<quint64>(v));
}#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG)
#undef QALGORITHMS_USE_BUILTIN_POPCOUNT
#endif
#undef QT_POPCOUNT_CONSTEXPRQ_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint32 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CTZ)return v ? QAlgorithmsPrivate::qt_builtin_ctz(v) : 32U;
#else// see http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightParallelunsigned int c = 32; // c will be the number of zero bits on the rightv &= -signed(v);if (v) c--;if (v & 0x0000FFFF) c -= 16;if (v & 0x00FF00FF) c -= 8;if (v & 0x0F0F0F0F) c -= 4;if (v & 0x33333333) c -= 2;if (v & 0x55555555) c -= 1;return c;
#endif
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint8 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CTZ)return v ? QAlgorithmsPrivate::qt_builtin_ctz(v) : 8U;
#elseunsigned int c = 8; // c will be the number of zero bits on the rightv &= -signed(v);if (v) c--;if (v & 0x0000000F) c -= 4;if (v & 0x00000033) c -= 2;if (v & 0x00000055) c -= 1;return c;
#endif
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint16 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CTZS)return v ? QAlgorithmsPrivate::qt_builtin_ctzs(v) : 16U;
#elseunsigned int c = 16; // c will be the number of zero bits on the rightv &= -signed(v);if (v) c--;if (v & 0x000000FF) c -= 8;if (v & 0x00000F0F) c -= 4;if (v & 0x00003333) c -= 2;if (v & 0x00005555) c -= 1;return c;
#endif
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint64 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CTZLL)return v ? QAlgorithmsPrivate::qt_builtin_ctzll(v) : 64;
#elsequint32 x = static_cast<quint32>(v);return x ? qCountTrailingZeroBits(x): 32 + qCountTrailingZeroBits(static_cast<quint32>(v >> 32));
#endif
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(unsigned long v) Q_DECL_NOTHROW
{return qCountTrailingZeroBits(QIntegerForSizeof<long>::Unsigned(v));
}Q_DECL_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint32 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZ)return v ? QAlgorithmsPrivate::qt_builtin_clz(v) : 32U;
#else// Hacker's Delight, 2nd ed. Fig 5-16, p. 102v = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);v = v | (v >> 8);v = v | (v >> 16);return qPopulationCount(~v);
#endif
}QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint8 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZ)return v ? QAlgorithmsPrivate::qt_builtin_clz(v)-24U : 8U;
#elsev = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);return qPopulationCount(static_cast<quint8>(~v));
#endif
}QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint16 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZS)return v ? QAlgorithmsPrivate::qt_builtin_clzs(v) : 16U;
#elsev = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);v = v | (v >> 8);return qPopulationCount(static_cast<quint16>(~v));
#endif
}QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(quint64 v) Q_DECL_NOTHROW
{
#if defined(QT_HAS_BUILTIN_CLZLL)return v ? QAlgorithmsPrivate::qt_builtin_clzll(v) : 64U;
#elsev = v | (v >> 1);v = v | (v >> 2);v = v | (v >> 4);v = v | (v >> 8);v = v | (v >> 16);v = v | (v >> 32);return qPopulationCount(~v);
#endif
}QT_POPCOUNT_RELAXED_CONSTEXPR inline uint qCountLeadingZeroBits(unsigned long v) Q_DECL_NOTHROW
{return qCountLeadingZeroBits(QIntegerForSizeof<long>::Unsigned(v));
}QT_WARNING_POP
QT_END_NAMESPACE#endif // QALGORITHMS_H
dm使用

//MainWindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <dm/dm.h>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;Dm::Idmsoft dm;
};
#endif // MAINWINDOW_H
//mainwindow.cpp#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);if(dm.setControl("dm.dmsoft"))//初始化COM对象{qDebug() << QStringLiteral("大漠测试,大漠版本:")<< dm.Ver();}
}MainWindow::~MainWindow()
{delete ui;
}
不管是debug 还是 release 。都能成功运行。运行后打印

这就代表大漠已经成功调通,接下来就可以正常开发了
相关文章:
大漠插件(二、Qt使用插件时注意事项)
本章目的 在上篇已经注册完毕大漠,那么怎么使用大漠来制作脚本,我选择了我最熟悉的Qt来开发,毕竟只是小软件,用脚本或者c都差不了多少。本章就是开发途中的一些坑。 本人开发环境是 win11 64、Qt 5.15.2安装了5.10.0的msvc2015 32…...
CSS 浮动
目标target✓ 能够说出来为什么需要浮动能够说出来浮动的排列特性能够说出来三种最常见的布局方式能够说出来为什么需要清除浮动,能够至少写出两种清楚浮动的方法能够利用Photoshop实现基本的切图能够利用Photoshop插件实现切图能够完成学成在线的页面布 传统网页布局的三种模…...
基于STM32+华为云IOT设计的火灾感知系统
一、设计需求 【1】 项目背景 随着城市化进程的加快和人们生活水平的提高,火灾事故频繁发生,给人们的生命财产安全带来巨大威胁。因此,开发一种可靠的火灾感知系统对于预防和减少火灾事故具有重要意义。近年来,随着物联网技术的发展,基于物联网的火灾感知系统逐渐成为研…...
算法通关村第八关|白银|二叉树的深度和高度问题【持续更新】
1.最大深度问题(后序遍历) 只需要一直递归,维护一个最大值。每一层只要有一个子节点,这个最大值就可以增加。 public int maxDepth(TreeNode root) {if (root null) {return 0;}int leftHeight maxDepth(root.left);int right…...
cmake 之add_definitions使用误区
需求 需要实现,在cmake中定义宏定义,可以:1) 在code中可以使用;2) 在cmake中可以识别是否已定义 问题 宏定义,cmake有add_definitions函数,直观的实现方法如下。 cmake_minimum…...
Leetcode—515.在每个树行中找最大值【中等】
2023每日刷题(二十三) Leetcode—515.在每个树行中找最大值 DFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned arra…...
安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…...
element 弹窗浏览器后退-遮照层还存在问题 以及跟vue keep-alive冲突
问题:element 弹窗浏览器后退-遮照层还存在问题 查询官网可以设置 modal-append-to-body“false” 可以全局设置 ElementUI.Dialog.props.modalAppendToBody.default false 后续 基本到这能解决问题,不过本项目比较特殊,使用了 keep-alive…...
C++(Qt)软件调试---自动注册AeDebug(17)
C(Qt)软件调试—自动注册AeDebug(17) 文章目录 C(Qt)软件调试---自动注册AeDebug(17)1、什么是AeDebug2、使用调试工具3、WinDbg注册到AeDebug4、ProcDump注册到AeDebug5、Dr.MinGW注册到AeDebug6、Visual Studio 注册到AeDebug 1…...
云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6
开源项目推荐 Kueue Kueue 是一套用于作业队列的 API 和控制器。它是作业级管理器,可决定何时允许作业启动(如创建 pod),何时停止作业(如删除活动 pod)。 Reloader 一个 Kubernetes 控制器,…...
Java2 - 数据结构
5 数据类型 5.1 整数类型 在Java中,数据类型用于定义变量或表达式可以存储的数据的类型。Java的数据类型可分为两大类:基本数据类型和引用数据类型。 byte,字节 【1字节】表示范围:-128 ~ 127 即:-2^7 ~ 2^7 -1 sho…...
精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘
目录 括号匹配问题最小栈最大栈 最大栈和最小栈是极致栈的两个重要变种。最大栈用于存储当前匹配的最大值,而最小栈用于存储当前匹配的最小值。 括号匹配问题 这个问题我们来看力扣20题的描述: 给定一个只包括 ‘(’,‘)’,‘{’…...
云存储/视频监控管理平台EasyCVR,使用sqlite数据库出现卡顿该如何优化?
视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…...
实战!工作中常用的设计模式
文章目录 前言一、策略模式1.1、 业务场景1.2 、策略模式定义1.3、 策略模式使用1.3.1、一个接口,两个方法1.3.2、不同策略的差异化实现1.3.3、使用策略模式 二、责任链模式2.1、业务场景2.2、责任链模式定义2.3、责任链模式使用2.3.1、一个接口或者抽象类2.3.2、每…...
MySQL进阶_1.逻辑架构和SQL执行流程
文章目录 第一节、逻辑架构剖析1.1、服务器处理客户端请求1.2、Connectors1.3、第1层:连接层1.4、第2层:服务层1.5、 第3层:引擎层1.6、 存储层1.7、小结 第二节、SQL执行流程2.1、查询缓存2.2、解析器2.3、优化器2.4、执行器 第三节、数据库…...
基于GCC的工具objdump实现反汇编
一:objdump介绍 在 Linux中,一切皆文件。 Linux 编程实际上是编写处理各种文件的代码。系统由许多类型的文件组成,但目标文件具有一种特殊的设计,提供了灵活和多样的用途。 目标文件是包含带有附加地址和值的助记符号的路线图。这…...
排序算法的空间复杂度和时间复杂度
一、排序算法的时间复杂度和空间复杂度 排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 冒泡排序 O(n) O(n) O(n) O(1) 稳定 直接选择排序 O(n) O(n) O(n) O(1) 不稳定 直接插入排序 O(n) O(n) O(n) O(1) 稳定 快速排序 O(n…...
【电路笔记】-基尔霍夫电路定律
基尔霍夫电路定律 文章目录 基尔霍夫电路定律1、框架和定义2、基尔霍夫电流定律3、基尔霍夫电压定律4、基尔霍夫定律应用5、基尔霍夫定律的局限性6、总结 在本文中,将介绍最基本、最重要的电路定律之一。 这些法律由德国医生古斯塔夫基尔霍夫 (Gustav Kirchoff) 于 …...
从零开始搭建React+TypeScript+webpack开发环境-基于axios的Ajax请求工具
什么是axios axios是一款基于Promise的HTTP客户端,适用于浏览器和Node.js环境。它的特点包括: 支持浏览器和Node.js环境。支持Promise API。支持拦截请求和响应。支持取消请求。自动转换JSON数据。支持CSRF保护。 使用axios可以更方便地发送HTTP请求&…...
【uniapp小程序下载】调用uni.uploadfile方法在调试工具里是没有问题的,但是线上版本和体验版就调用不成功,真机调试也没问题
把你的下载地址前缀添加到合法域名就解决了 在调试工具里成功了是因为勾选了下面这项 下面是我的下载并打开函数 methods: {// 下载downloadFileFn(data) {if (this.detailsObj.currentUserBuy) {uni.downloadFile({// data是路径url: https:// data,success(res) {//保存到本…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
