You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Pythonnet version: 2.4.0 (in both python versions)
Python version:
code working in Python 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)] on win32
code not working in Python 3.7.7 (tags/v3.7.7:d7c567b08f, Mar 10 2020, 10:41:24) [MSC v.1900 64 bit (AMD64)] on win32
Operating System: Windows 10 Professional 64-bit
Details
Trying to copy a .NET array to a numpy array using Marshal as in the example on the mailing list:
import clr
from System import Array, Double, IntPtr, Random
from System.Runtime.InteropServices import Marshal
import numpy as np
r = Random()
src = Array.CreateInstance(Double, 10000000)
for i in xrange(len(src)): src[i] = r.NextDouble()
from System.Runtime.InteropServices import Marshal
dest = np.empty(len(src))
dest_ptr = IntPtr.__overloads__[int](dest.__array_interface__['data'][0])
Marshal.Copy(src, 0, dest_ptr, len(src))
was working fine in python 2 but in 3 results in
Traceback (most recent call last):
File "test.py", line 12, in <module>
dest_ptr = IntPtr.__overloads__[int](dest.__array_interface__['data'][0])
TypeError: no constructor matches given arguments
TODO
How can the changed python 3 int be used in this constructor?
No, check the linked PR. The issue is that primitive types are initialised differently, which in our case is implemented as a conversion, but not for the ptr types.
Activity
Improve "No constructor matches given arguments" message with more de…
Improve "No constructor matches given arguments" message with more de…
Improve "No constructor matches given arguments" message with more de…
filmor commentedon Jul 8, 2022
@lostmsu I'll investigate this, there seems to be no way to initialise a
System.IntPtrfrom Python.NET right now.greg814 commentedon Jul 8, 2022
Did you see this parsing workaround on stackoverflow? Funny you would comment here 2 hrs after the so post...
filmor commentedon Jul 8, 2022
It's related, @jhe-pf commented on gitter and I started to look into it :)
I have identified the problem, I just need to find a fix.
lostmsu commentedon Jul 8, 2022
@filmor as mentioned on StackOverflow,
__overloads__[Int64]should work. The overloads fail withintbecauseintis not a .NET type.filmor commentedon Jul 8, 2022
No, check the linked PR. The issue is that primitive types are initialised differently, which in our case is implemented as a conversion, but not for the ptr types.
lostmsu commentedon Jul 11, 2022
I have
pythonnet==3.0.0a2and in itIntPtr.__overloads__[Int64](42).ToInt64()prints42.EDIT. Ah, just updated to rc2 and there I indeed get "TypeError: No match found for given type params"
filmor commentedon Aug 12, 2022
Fixed in #1861.