Можно ли вызывать метод params переменной .NET из Managed C ++? - PullRequest
0 голосов
/ 25 января 2012

У меня есть метод, объявленный в интерфейсе, например:

public interface IInterface
{
    void DoSomething(string format, params object[] arguments);
}

Я динамически загружаю управляемый класс C ++, который использует реализацию этого интерфейса. Интерфейс и реализация оба C #.

IInterface^ foo = gcnew Implentation();

Этот звонок в порядке:

foo->DoSomething("string", someParam);

Сбой вызова:

foo->DoSomething("string");

Похоже, что если нет параметров для передачи, он просто не может разрешить метод, который должен принимать любое количество параметров (включая, конечно, ноль). Возможно, я мог бы использовать nullptr в качестве заполнителя, но это довольно уродливо, или я мог бы добавить избыточную перегрузку DoSomething(string format), что тоже не здорово, но лучше, чем делать все вызовы более неудобными, чем они должны быть.

Я что-то упустил или это не поддерживается? Все помощники в Интернете показывают, как объявлять эквивалентные параметры в c ++, но это не помогает в моем сценарии.

1 Ответ

0 голосов
/ 25 января 2012

Я не могу воспроизвести вашу проблему.

Учитывая интерфейс и реализацию C #:

using System;

namespace SomeNamespace
{
    public interface IInterface
    {
        void Print(string format, params object[] args);
    }

    public class Implementation : IInterface
    {
        public void Print(string format, params object[] args)
        {
            Console.WriteLine(format, args);
        }
    }
}

Этот код C ++ / CLI отлично работает:

using namespace System;
using namespace SomeNamespace;

public ref class Test
{
public:
    static void Run()
    {
        IInterface^ foo = gcnew Implementation();
        foo->Print("hello, {0}", "world");
        foo->Print("hello, world");
    }
};

Есть ли еще один элемент, который здесь отсутствует?Или я упустил суть :) 1009 *

...