gpt4 book ai didi

c# - 如何将 C# 委托(delegate)函数传递给托管 C++ .Dll?

转载 作者:太空狗 更新时间:2023-10-29 23:11:50 24 4
gpt4 key购买 nike

我在 C# 中有这个委托(delegate)。

public delegate string ACSharpDelegate(string message);

我将如何创建一个托管 C++ .dll 来接受这个委托(delegate)作为参数,以便 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 ();
}
}
}

关于c# - 如何将 C# 委托(delegate)函数传递给托管 C++ .Dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1279062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com