Передача объекта C # (содержащего член статического объекта) в качестве параметра в программу C ++ / CLI - PullRequest
0 голосов
/ 07 сентября 2018

В моем коде C # у меня есть класс

[Serializable] 
public class MySignal: IMySignal
{
    static List<IDescription> m_Descriptions;
    public string m_Comment;
    public IList<string> m_Names;
 }

В моей основной программе на C # есть функция, вызывающая внешнюю программу на C ++ / CLI (с использованием .NET Remoting). Я передаю в эту функцию строку, двойник и мой объект «test» типа MySignal.

bool GenSignal(string sSignalName, double pValue, MySignal test);

В коде C ++ / CLI у меня есть реализация функции GenSignal внутри управляемого класса.

bool ManagedScriptInterface::GenSignal(String^ sSignalName, double pValue, MySignal^ test)
{
//Debugging is stopped here
//Some code... 

}

При отладке внутри моей функции я могу получить свой объект (MySignal ^ test). Внутри я могу получить доступ ко всем публичным членам (m_Names и m_Comment). Однако член статического объекта m_Description (который объявил static, и мне абсолютно необходимо это в моей программе на C #) равен nullptr.

У меня вопрос: как мне сделать так, чтобы мой статический объект m_Description был виден и доступ к нему внутри моей функции в C ++ / CLI.

Я надеюсь, что кто-то может помочь в этой теме.

Большое спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

Я удалил [Serializable] из моих классов в C # и использовал MarshalByRefObject. Кажется, это решает мою проблему. У меня нет твердого фона в C #, но я думаю, что атрибут Serializable в моем случае не подходит, так как я меняю домен с одной программы на C # на другую программу на C ++ / CLI с использованием .NetRemoting. Сериализуемый атрибут, кажется, создает локальную копию моего объекта в текущем домене приложений.

Этот пост также помог мне в моих исследованиях: Экземпляры статических переменных и домены приложений, что происходит?

...