KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
How can I declare a managed method in C++/CLI that has an optional parameter when used from C#? I've decorated the parameter with both an Optional and a DefaultParameterValue attribute (see: How default parameter values are encoded ), but only the Optional attribute seems to be honored. C++/CLI: public ref class MyClass1 { public: MyClass1([System::Runtime::InteropServices::Optional] [System::Runtime::InteropServices::DefaultParameterValue(2)] int myParam1) ↑ { System::Console::WriteLine(myParam1); } }; C#: var myInstance1 = new MyClass1(); // compiles and runs Output : 0 Expected Output: 2 Visual C# IntelliSense: MyClass1.MyClass1([int myParam1 = 0]); // wrong default value ↑ Edit: A closer look with a disassembler reveals that the C++/CLI compiler does indeed not generate the required .param [1] = int32(2) directive. The IL code shown by Reflector is wrong. Reflector: .method public hidebysig specialname rtspecialname instance void .ctor([opt] int32 myParam1) cil managed { .param [1] = int32(2) // bug ... ILDASM: .method public hidebysig specialname rtspecialname instance void .ctor([opt] int32 myParam1) cil
Tags (comma-separated)
Save Edits
Cancel