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

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


@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/25ebc9d7/attachment.html>


More information about the PythonDotNet mailing list