从非托管C Dll加载托管C ++ Dll?

时间:2013-12-10 17:47:20

标签: c# c++ unmanaged managed

我有一个现成的产品,它支持需要用非托管C编写的自定义插件。它不支持Managed Dll,我的首选语言是c#。

需要传递回现货产品的信息非常基本,可以保存在字符串中。

所以我想我可以做到以下几点:

  1. 将我的大部分代码写在C#Dll中。
  2. 在C ++管理代码中编写一个包装器,它调用我的C#方法。
  3. 在非托管C中编写一个基本的Dll,它调用托管C ++ Dll。
  4. 现在,在托管C ++和C#Dll之间进行通信非常简单。

    但我无法弄清楚如何从非托管c dll调用托管c ++函数。 对一些简单的示例代码的任何帮助都会很棒。

    由于

    编辑: 我在下面的Alex的答案中创建了一个关于我如何做到这一点的Code Project文章。 http://www.codeproject.com/Tips/695387/Calling-Csharp-NET-methods-from-unmanaged-code

2 个答案:

答案 0 :(得分:6)

你几乎做对了。只需将数字2和3放在同一个C ++ / CLI DLL中。您既可以使用.NET类,也可以从C ++ / CLI项目中导出C函数。

extern "C" __declspec( dllexport ) void __stdcall PureExportC(
                                                    const wchar_t* param
)
{
    CSharpAssemblyNamespace::CSharpWorker worker;
    worker.DoWork( gcnew String(param) );
}

答案 1 :(得分:1)

我不认为,你可以这样做。但是你可以为产品编写一个c ++(非托管)插件。然后使用c#编写一个支持allone托管应用程序,从插件启动它并使用命名管道或套接字在它们之间进行通信。