diff options
author | Miguel Costa <miguel.costa@qt.io> | 2021-11-09 14:31:56 +0100 |
---|---|---|
committer | Miguel Costa <miguel.costa@qt.io> | 2021-11-16 16:07:48 +0000 |
commit | 91339da1919ba55d3b2463b011d6c58a5247e84d (patch) | |
tree | 72b58354a98cff15e26ff773941119a1347e9a41 | |
parent | a0b78490b92fe2783e8f6dde88e631c7367ac902 (diff) |
Use 64-bit pointers in VsQml protocol
The QML syntax tree protocol between the Qt VS Tools and VsQml will now
use a 64-bit representation for pointers. Previously, only 32 bits were
used when marshaling a pointer value. This is incompatible with VS 2022,
which is a 64-bit application.
Task-number: QTVSADDINBUG-920
Change-Id: I3fe97618b1363c2ad39ba0ef352532d2660916c6
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | QtVsTools.Package/QML/Parser/QmlParserInterop.cs | 4 | ||||
-rw-r--r-- | VsQml/astvisitor.cpp | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/QtVsTools.Package/QML/Parser/QmlParserInterop.cs b/QtVsTools.Package/QML/Parser/QmlParserInterop.cs index 9d505b5d..89064878 100644 --- a/QtVsTools.Package/QML/Parser/QmlParserInterop.cs +++ b/QtVsTools.Package/QML/Parser/QmlParserInterop.cs @@ -306,7 +306,9 @@ namespace QtVsTools.Qml IntPtr ptrRef; try { - ptrRef = new IntPtr(nodeData.ReadInt32()); + long ptrHi = nodeData.ReadInt32(); + long ptrLo = nodeData.ReadInt32(); + ptrRef = new IntPtr((ptrHi << 32) | (ptrLo & 0xFFFFFFFFL)); } catch (Exception) { return; } diff --git a/VsQml/astvisitor.cpp b/VsQml/astvisitor.cpp index c5313329..b863b650 100644 --- a/VsQml/astvisitor.cpp +++ b/VsQml/astvisitor.cpp @@ -67,7 +67,11 @@ private: void marshalPointer(QVector<int> &nodeData, void *ptr) { - nodeData.append(reinterpret_cast<int>(ptr)); + auto ptrRef = reinterpret_cast<long long>(ptr); + auto ptrHi = ptrRef >> 32; + auto ptrLo = ptrRef & 0xFFFFFFFFLL; + nodeData.append(int(ptrHi)); + nodeData.append(int(ptrLo)); } void marshalNode(QVector<int> &nodeData, Node *node) |