5
私はC#でこのデリゲートを持っています。C#delegate関数をManaged C++ .Dllにどのように渡すのですか?
public delegate string ACSharpDelegate(string message);
がどのように私はC++の.dllはそれを呼び出すことができるようにパラメータとして、このデリゲートを受け入れますマネージドC++の.dllを作成するに行くか ?
私はC#でこのデリゲートを持っています。C#delegate関数をManaged C++ .Dllにどのように渡すのですか?
public delegate string ACSharpDelegate(string message);
がどのように私はC++の.dllはそれを呼び出すことができるようにパラメータとして、このデリゲートを受け入れますマネージドC++の.dllを作成するに行くか ?
循環参照を避けるには、少なくとも3つのアセンブリが必要です。
C#ライブラリ:
namespace CSLibrary
{
public class CSClass
{
public delegate string ACSharpDelegate (string message);
public string Hello (string message)
{
return string.Format("Hello {0}", message);
}
}
}
C++/CLIライブラリ(参照CSLibrary):
using namespace System;
namespace CPPLibrary {
public ref class CPPClass
{
public:
String^ UseDelegate(CSLibrary::CSClass::ACSharpDelegate^ dlg)
{
String^ dlgReturn = dlg("World");
return String::Format("{0} !", dlgReturn);
}
};
}
C#プログラム(参照CSLibraryとCPPLibrary):
namespace ConsoleApplication
{
class Program
{
static void Main (string [] args)
{
CSLibrary.CSClass a = new CSLibrary.CSClass();
CSLibrary.CSClass.ACSharpDelegate dlg = new CSLibrary.CSClass.ACSharpDelegate (a.Hello);
CPPLibrary.CPPClass b = new CPPLibrary.CPPClass();
String result = b.UseDelegate (dlg);
Console.WriteLine (result);
Console.Read();
}
}
}