从C+引发事件+/CLI到C#
我正在尝试将一个事件从CLI/C++类引发回C 我的代码如下所示 调用WriteLog函数应触发事件。但当运行时,事件不会触发。此外,没有可见的错误 ----C++/CLI----- ''' ''' ----C#---- '''从C+引发事件+/CLI到C#,c#,c++-cli,C#,C++ Cli,我正在尝试将一个事件从CLI/C++类引发回C 我的代码如下所示 调用WriteLog函数应触发事件。但当运行时,事件不会触发。此外,没有可见的错误 ----C++/CLI----- ''' ''' ----C#---- ''' ''我已经解决了这个问题。问题在于实例创建。我实际上是将CLI实现为一个单例类,并在C#code中创建另一个对象。在C#中使用相同的实例将解决上述问题 ----C++/CLI----- ''' ''' ----C#---- ''' ''”问题不清楚。CLI的全部要点是源
''我已经解决了这个问题。问题在于实例创建。我实际上是将CLI实现为一个单例类,并在C#code中创建另一个对象。在C#中使用相同的实例将解决上述问题 ----C++/CLI----- ''' ''' ----C#---- '''
''”问题不清楚。CLI的全部要点是源语言不重要。您可以使用从C++/CLI编译的DLL,方法与VB/CLI、C#和F#相同。
public ref class CLoggerCLI
{
public:
CLoggerCLI();
~CLoggerCLI();
delegate void NotificationDelegate(System::String^ message);
event NotificationDelegate^ NotificationEvent;
void WriteLog(string message);
static CLoggerCLI^ GetSingleInstnace();
private:
static CLoggerCLI^ singleInstance;
static Object^ m_lock = gcnew Object();
};
void CLoggerCLI::WriteLog(string message)
{
System::String^ msg = gcnew System::String(message.c_str());
NotificationEvent(msg);
}
public class TestClass
{
#region Private Fields
private CLoggerCLI loggerCLI = new CLoggerCLI();
#endregion
#region Public Method
public TestClass()
{
this.loggerCLI.NotificationEvent += LoggerCLI_NotificationEvent;
}
private void LoggerCLI_NotificationEvent(string message)
{
Console.WriteLine($"*****{message}****");
}
}
public ref class CLoggerCLI
{
public:
delegate void NotificationDelegate(System::String^ message);
event NotificationDelegate^ NotificationEvent;
void WriteLog(string message);
static CLoggerCLI^ GetSingleInstnace();
private:
static CLoggerCLI^ singleInstance;
static Object^ m_lock = gcnew Object();
CLoggerCLI();
~CLoggerCLI();
};
void CLoggerCLI::WriteLog(string message)
{
System::String^ msg = gcnew System::String(message.c_str());
NotificationEvent(msg);
}
public class TestClass
{
#region Public Method
public TestClass()
{
CLoggerCLI.GetSingleInstnace().NotificationEvent += LoggerCLI_NotificationEvent;
}
private void LoggerCLI_NotificationEvent(string message)
{
Console.WriteLine($"*****{message}****");
}
}