将C#对象(包含静态对象成员)作为参数传递给C ++ / CLI程序

时间:2018-09-07 08:41:57

标签: c# c++ .net static clr

在我的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)。我要在此函数中传递一个字符串,一个双精度和MySignal类型的对象“ test”。

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 ^测试)。在其中,我可以访问所有公共成员(m_Names和m_Comment)。但是,静态对象成员m_Descriptions(声明为static,而我在C#程序中绝对需要它)等于nullptr。

我的问题是:如何使静态对象m_Descriptions可见并在C ++ / CLI中的函数内部访问它。

我希望有人可以在这个主题上提供帮助。

非常感谢!

1 个答案:

答案 0 :(得分:1)

我从C#中的类中删除了[Serializable],并使用了MarshalByRefObject。似乎可以解决我的问题。我在C#中没有扎实的背景,但是我认为Serializable属性不适用于我的情况,因为我正在使用.NetRemoting将Domain从C#中的一个程序更改为C ++ / CLI中的另一个程序。 可序列化属性似乎可以在当前AppDomain中创建我对象的本地副本。

这篇文章还帮助我进行了调查:Static Variable Instances and AppDomains, what is happening?