[IronPython] how to convert C# MarshalAs code to IronPython
Ashley Abraham
abrahams84 at gmail.com
Sun Jun 6 07:57:20 CEST 2010
Hi,
I have the following C# code and I am trying to do the same
functionality in IronPython, any help is appreciated.
I was trying to do the same functionality in IronPython using the clrtype.py
from the IronPython-2.6-Samples and I am able to connect to the library and
the function but I am having trouble passing array of strings. With the
current code it only passes the first letter and then it crashes.
I am trying to call cwavec(int, int, char *) and it is a C function which
is part of the vniwave.dll and I am trying access it in IronPython.
C# code:
namespace PVWave
{
public class OPI
{
[DllImport("C:\\datk_code\\VNI\\wave\\bin\\bin.i386nt\\vniwave.dll",
EntryPoint = "cwavec",
ExactSpelling = false,
CharSet = CharSet.Ansi,
SetLastError = true)]
public static extern unsafe int cwavec(Int32 action, Int32 nCmds,
[MarshalAs(UnmanagedType.LPArray, ArraySubType =
UnmanagedType.LPStr, SizeParamIndex = 10)] string[] cmds);
}
}
Here is my attempt in IronPython:
import clrtype
import System
import sys
class OPI(object):
"Description of Class"
# Note that you could also the "ctypes" modules instead of pinvoke
declarations
__metaclass__ = clrtype.ClrClass
sys.path.append("C:\\datk_code\\VNI\\wave\\bin\\bin.i386nt")
from System.Runtime.InteropServices import DllImportAttribute,
PreserveSigAttribute
DllImport = clrtype.attribute(DllImportAttribute)
PreserveSig = clrtype.attribute(PreserveSigAttribute)
@staticmethod
@DllImport("vniwave.dll")
@PreserveSig()
@clrtype.accepts(System.Int32, System.Int32,
System.Array[System.String])
@clrtype.returns()
def cwavec(action, nCommands, commands): raise RuntimeError("this should
not get called")
def call_pinvoke_method_pvwave():
print "Calling pinvoke pvwave methods:"
actionNum = 2
nCommands = 1
commands = System.Array[System.String](['PRINT, "Connected to PV-Wave
from IronPython"'])
print "cwavec(action, nCommands, commands):"
OPI.cwavec(actionNum, nCommands, commands)
call_pinvoke_method_pvwave()
Thanks
Ash
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20100606/4abbbcc9/attachment.html>
More information about the Ironpython-users
mailing list