[Python.NET] Problem with System.ArgumentException in call to method from dll

Daniel Krause m.daniel.krause at googlemail.com
Wed Jan 23 21:07:29 CET 2013


I could solve the problem using a subclass of BitmapSource: BitmapImage has
a constructor.

from System.Windows.Media.Imaging import BitmapImage

bitmapsrc = BitmapImage()
...
bitmapsrc = cam.GetImage(bitmapsrc, timeout)



2013/1/23 Tribble, Brett <btribble at ea.com>

> My personal solution would be to wrap the camera code in a very thin
> assembly that manages this stuff and provides a clean interface for
> python.net to hook into. I’m lazy that way though…****
>
> ** **
>
> *From:* PythonDotNet [mailto:pythondotnet-bounces+btribble=
> ea.com at python.org] *On Behalf Of *Daniel Krause
> *Sent:* Tuesday, January 22, 2013 10:08 PM
>
> *To:* pythondotnet at python.org
> *Subject:* Re: [Python.NET] Problem with System.ArgumentException in call
> to method from dll****
>
> ** **
>
> @Brett****
>
> ** **
>
> When I try****
>
> ** **
>
> bitmapsrc = BitmapSource()****
>
> ** **
>
> I get the following error:****
>
> ** **
>
> Traceback (most recent call last):****
>
>   File "C:\Users\mdk\workspace\\camera\testbitmap.py", line 8, in <module>
> ****
>
>     bitmapsrc = BitmapSource()****
>
> TypeError: cannot instantiate abstract class****
>
> ** **
>
> I will have a look at System.Reflection, thanks for the hint.****
>
> ** **
>
> @Brad****
>
> The documentation does not say anything about "safe" or "unsafe". I do not
> have the source for the dll, only for the examples shipped with the dll. If
> you would like to have a look at them, I could send them to you.****
>
> ** **
>
> ** **
>
> Daniel****
>
> ** **
>
> 2013/1/23 brad at fie.us <brad at fie.us>****
>
> Just to clarify: neither version of the methods you are calling are marked
> "unsafe" in the proper c# .net manner are they?  I would not be surprised
> to find PythonNet not providing access to "unsafe" methods.  I would need
> to take a trip through the source to verify. ****
>
> ** **
>
> On Jan 22, 2013, at 4:10 PM, Daniel Krause <m.daniel.krause at googlemail.com>
> wrote:****
>
>
>
> ****
>
> That is right, I want to get the value of the output parameter.****
>
> ** **
>
> The following variant looks much more logical to me, but than I get
> another error:****
>
> bitmapsrc = cam.GetImage(timeout)****
>
> TypeError: No method matches given arguments****
>
> ** **
>
> So it seems that I have to pass the "out"-parameter to the method as well,
> but that was not working either.****
>
> ** **
>
> ** **
>
> 2013/1/22 brad at fie.us <brad at fie.us>****
>
> You are setting the bitmapsrc variable to be equal to the class
> BitmapSource.  I assume you mean to get the value of an output parameter,
> rather than pass a class object into the method.
>
> Though I do not speak german.  But I think that's it.****
>
>
> On Jan 22, 2013, at 2:58 PM, Daniel Krause <m.daniel.krause at googlemail.com>
> wrote:
>
> > I want to use a method from an API to control a camera
> (xiApi.NETX64.dll).
> >
> > The method is described in two ways:
> > //
> > void GetImage( out WriteableBitmap image, int timeout)
> > Description : This function acquires image and returns fills
> WritableBitmap object. Supports UNSAFE buffer policy mode.
> > Parameters :
> > out WriteableBitmap image : WPF BitmapSource to be filled.
> > int timeout : Time interval required to wait for the image (in
> milliseconds).
> > //
> > void GetImage(WriteableBitmap image, int timeout)
> > Description : This function acquires image and returns fills
> WritableBitmap object. Supports SAFE buffer policy mode.
> > Parameters :
> > WriteableBitmap image : WPF BitmapSource to be filled.
> > int timeout : Time interval required to wait for the image (in
> milliseconds).
> > //
> >
> > The code in a c#-sample looks like this (I skipped the initialisation of
> myCam, but if it helps I can provide the complete code):
> > //
> > using System.Windows.Media.Imaging;
> > int timeout = 10000;
> > BitmapSource myBitmapSrc;
> > myCam.GetImage(out myBitmapSrc, timeout);
> > //
> > This code I can compile, and it is working.
> >
> > I tried to keep the python code as close as possible, but I get errors I
> do not understand:
> > ##
> > import clr
> > import sys
> >
> sys.path.append("C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\WPF")
> > clr.AddReference("PresentationCore")
> > clr.AddReference("xiAPI.NETX64")
> > from xiApi.NET import *
> > from System.Windows.Media.Imaging import BitmapSource
> > bitmapsrc = BitmapSource
> > print bitmapsrc
> > cam = xiCam()
> > cam.OpenDevice(0)
> > cam.SetParam(PRM.BUFFER_POLICY, BUFF_POLICY.SAFE)
> > cam.SetParam(PRM.IMAGE_DATA_FORMAT,  IMG_FORMAT.MONO8)
> > cam.StartAcquisition()
> > timeout = 1000
> > bitmapsrc = cam.GetImage(bitmapsrc, timeout)
> > cam.StopAcquisition()
> > ##
> >
> > Console output:
> > <class 'System.Windows.Media.Imaging.BitmapSource'>
> > Traceback (most recent call last):
> >   File "C:\Users\mdk\workspace\camera\testbitmap.py",
> > line 17, in <module>
> >     bitmapsrc = cam.GetImage(bitmapsrc, timeout)
> > System.ArgumentException: Das Objekt mit dem Typ "System.RuntimeType"
> kann nicht
> >  in den Typ "System.Drawing.Bitmap&" konvertiert werden.
> >    bei System.RuntimeType.TryChangeType(Object value, Binder binder,
> CultureInfo
> >  culture, Boolean needsSpecialCast)
> >
> >    bei System.Reflection.MethodBase.CheckArguments(Object[] parameters,
> Binder b
> > inder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
> >
> >    bei System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object
> obj, Bind
> > ingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo
> culture)
> >
> >    bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
> BindingFlags invok
> > eAttr, Binder binder, Object[] parameters, CultureInfo culture)
> >
> >    bei Python.Runtime.MethodBinder.Invoke(IntPtr inst, IntPtr args,
> IntPtr kw, M
> > ethodBase info, MethodInfo[] methodinfo)****
>
> > _________________________________________________
> > Python.NET mailing list - PythonDotNet at python.org
> > http://mail.python.org/mailman/listinfo/pythondotnet****
>
> ** **
>
> _________________________________________________
> Python.NET mailing list - PythonDotNet at python.org
> http://mail.python.org/mailman/listinfo/pythondotnet****
>
> ** **
>
> ** **
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pythondotnet/attachments/20130123/a8a13141/attachment-0001.html>


More information about the PythonDotNet mailing list