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

brad at fie.us brad at fie.us
Tue Jan 22 21:10:07 CET 2013


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



More information about the PythonDotNet mailing list