Skip to content

Calling methods with optional arguments #22

@cserteGT3

Description

@cserteGT3

I'm not really familiar with the internals of the package (nor .Net to be honest), but would it be possible to enable calling methods without specifyin optional arguments?
I copied and modified an MWE from a previous issue:

PS C:\Users\csert\Documents\temp\dotnettest> Add-Type -Namespace JuliaTest -Name Foo -MemberDefinition @'
>> public double Bar(double x, double y = 2)
>> {
>> return y*x;
>> }
>> '@ -OutputAssembly Example.dll

Calling from julia:

julia> using DotNET

julia> asm=T"System.Reflection.Assembly".LoadFrom("Example.dll")
System.Reflection.RuntimeAssembly("Example, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")

julia> Foo=asm.GetType("JuliaTest.Foo")
JuliaTest.Foo

julia> foo = Foo.new()
JuliaTest.Foo("JuliaTest.Foo")

julia> foo.Bar(3.14, 2)
6.28

julia> foo.Bar(3.14, 3)
9.42

julia> foo.Bar(3.14)
ERROR: CLRException: System.MissingMethodException: Method 'JuliaTest.Foo.Bar' not found.
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at CLRBridge.Meta.InvokeMember(IntPtr type, String name, BindingFlags bindingFlags, IntPtr binder, IntPtr target, IntPtr[] providedArgs, UInt32 argCount, IntPtr& exception)
Stacktrace:
 [1] track_and_throw(exhandle::UInt64)
   @ DotNET.CLRBridge C:\Users\csert\.julia\packages\DotNET\Rx490\src\CLRBridge.jl:46
 [2] InvokeMember(type::UInt64, name::String, bindingFlags::UInt32, binder::Int64, target::UInt64, providedArgs::Vector{UInt64})
   @ DotNET.CLRBridge C:\Users\csert\.julia\packages\DotNET\Rx490\src\CLRBridge.jl:325
 [3] invokemember(flags::UInt32, type::CLRObject, this::CLRObject, name::Symbol, args::Float64)
   @ DotNET C:\Users\csert\.julia\packages\DotNET\Rx490\src\marshalling.jl:83
 [4] invokemember(type::CLRObject, this::CLRObject, name::Symbol, args::Float64)
   @ DotNET C:\Users\csert\.julia\packages\DotNET\Rx490\src\marshalling.jl:94
 [5] (::DotNET.PendingInvocation)(args::Float64)
   @ DotNET C:\Users\csert\.julia\packages\DotNET\Rx490\src\operators.jl:19
 [6] top-level scope
   @ REPL[7]:1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions