<p>解决方法是使用<code>Overloads</code>方法<code>IntPtr</code></p>
<pre><code>from System import IntPtr, Int32, Int64
my_ptr = ffi.cast("intptr_t", my_c_struct)
cs_handle = IntPtr.Overloads[Int64](Int64(int(my_ptr)))
</code></pre>
<p>如前所述<a href="https://stackoverflow.com/a/31550999/7919597">here</a>和{a2}。在</p>
<p>下面是一个工作示例:</p>
^{pr2}$
<p>关于上面发生的事情的更多信息(可以在这里找到):</p>
<blockquote>
<ul>
<li><p>C#'s IntPtr maps exactly to C/C++'s intptr_t.</p></li>
<li><p>intptr_t integer type capable of holding a pointer</p></li>
<li><p>To cast a pointer to an int, cast it to intptr_t or uintptr_t, which are defined by C to be large enough integer types. <a href="http://cffi.readthedocs.io/en/latest/using.html" rel="nofollow noreferrer">cffi doc with examples</a></p></li>
<li><p>IntPtr is just a .NET type for void*.</p></li>
<li><p>The equivalent of an unmanaged pointer in the C# language is IntPtr. You can freely convert a pointer back and forth with a cast. No pointer type is
associated with it even though its name sounds like "pointer to int",
it is the equivalent of void* in C/C++.</p></li>
<li><p>IntPtr(5) complains that <code>int/long' value cannot be converted to System.IntPtr</code>. It seems like it is trying to cast or something instead of calling the constructor. (found <a href="https://mail.python.org/pipermail/pythondotnet/2013-January/001272.html" rel="nofollow noreferrer">here</a>)</p></li>
<li><p>Methods of CLR objects have an '_ <em>overloads</em> _', which will soon be deprecated in favor of iPy compatible Overloads, attribute that can be used for this purpose. (found <a href="http://pythonnet.sourceforge.net/readme.html#genericmethods" rel="nofollow noreferrer">here</a>) </p></li>
</ul>
</blockquote>