将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
Passing a C# object (containing a static object member) as a paramter to C++/CLI program
在我的 C# 代码中,我有一个 class
[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 代码中,我在托管 class 中实现了 GenSignal 函数。
bool ManagedScriptInterface::GenSignal(String^ sSignalName, double pValue, MySignal^ test)
{
//Debugging is stopped here
//Some code...
}
在我的函数内部调试时,我可以获得我的对象(MySignal^ 测试)。在其中我可以访问所有 public 成员(m_Names 和 m_Comment)。但是,静态对象成员 m_Descriptions(声明为静态,我在 C# 程序中绝对需要它)等于 nullptr。
我的问题是:我怎样才能使我的静态对象 m_Descriptions 可见并在 C++/CLI 的函数中访问它。
我希望有人可以帮助解决这个问题。
非常感谢!
我在 C# 中从 类 中删除了 [Serializable] 并使用了 MarshalByRefObject。似乎解决了我的问题。我在 C# 中没有任何扎实的背景,但我认为 Serializable 属性不适合我的情况,因为我正在使用 .NetRemoting 将域从 C# 中的一个程序更改为 C++/CLI 中的另一个程序。
Serializable 属性似乎在当前 AppDomain 中创建了我的对象的本地副本。
这个 post 也帮助了我的调查:Static Variable Instances and AppDomains, what is happening?
在我的 C# 代码中,我有一个 class
[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 代码中,我在托管 class 中实现了 GenSignal 函数。
bool ManagedScriptInterface::GenSignal(String^ sSignalName, double pValue, MySignal^ test)
{
//Debugging is stopped here
//Some code...
}
在我的函数内部调试时,我可以获得我的对象(MySignal^ 测试)。在其中我可以访问所有 public 成员(m_Names 和 m_Comment)。但是,静态对象成员 m_Descriptions(声明为静态,我在 C# 程序中绝对需要它)等于 nullptr。
我的问题是:我怎样才能使我的静态对象 m_Descriptions 可见并在 C++/CLI 的函数中访问它。
我希望有人可以帮助解决这个问题。
非常感谢!
我在 C# 中从 类 中删除了 [Serializable] 并使用了 MarshalByRefObject。似乎解决了我的问题。我在 C# 中没有任何扎实的背景,但我认为 Serializable 属性不适合我的情况,因为我正在使用 .NetRemoting 将域从 C# 中的一个程序更改为 C++/CLI 中的另一个程序。 Serializable 属性似乎在当前 AppDomain 中创建了我的对象的本地副本。
这个 post 也帮助了我的调查:Static Variable Instances and AppDomains, what is happening?