-1
C# 코드를 호출하는 C++ 코드를 작성하고 있습니다. C#은 C++ 코드에서 메소드를 다시 호출해야 할 수도 있습니다. 두 부분 모두 C#이라면 다음과 같은 메커니즘을 사용합니다. ShouldBCpp
은 (&은 CsharpBase
을 변경할 수 없음) 이 가리키는 내용을 알 수 없으므로 ShouldBCpp
에서 ShouldBCpp
에 등록하는 대신 ShouldBCpp
에서 Csharp
으로 EventHandler를 전달합니다.C++/CLI에서 C# 이벤트에 등록하십시오.
public abstract class CsharpBase
{
public abstract void SomeMethodDoingActionInB();
}
public class Csharp : CsharpBase
{
public Csharp(EventHandler f)
{
MySpecialHook += f;
}
public event EventHandler MySpecialHook;
public override void SomeMethodDoingActionInB()
{
if (MySpecialHook != null)
MySpecialHook(this, null);
}
}
public class ShouldBCpp
{
public CsharpBase csharp;
public ShouldBCpp()
{
csharp = new Csharp(NotificationFromClassB); // actually using Activator::CreateInstance
}
public void NotificationFromClassB(object sender, EventArgs e)
{
}
public void Go()
{
csharp.SomeMethodDoingActionInB();
}
}
class Program
{
static void Main(string[] args)
{
ShouldBCpp shouldBCpp = new ShouldBCpp();
shouldBCpp.Go();
}
}
질문은 C++/CLI에서 ShouldBCpp를 작성하는 방법입니다. delegate
:
를 사용하기위한 보너스 포인트는
당신이 자신을 도와 시도? 인기있는 디 컴파일러 중 일부는 원래 MSIL이 다른 언어에서 나온 경우에도 MSIL을 C++/CLI로 디 컴파일 할 수 있습니다. –
[C++/CLI에서 C# 이벤트 연결] (http://stackoverflow.com/questions/19386508/hooking-a-c-sharp-event-from-c-cli) –