【问题标题】:Possible to write C# DLL (plugin) for a C++ application?可以为 C++ 应用程序编写 C# DLL(插件)吗?
【发布时间】:2011-04-25 15:46:38
【问题描述】:

我想为 C++ 应用程序编写一个插件 (DLL),但我想使用 C#。这可能吗?我无权访问 C++ 代码,因此无法对其进行修改。

根据我收集到的信息,C++(主机)应用程序只是调用不同的函数。

这是一个 C++ 示例插件函数:

void On_Start(HINSTANCE hInstance, HWND hWnd, BOOL bLogSet, int nDLLID, char * szHotKey)

这将如何转换为可以从此 C++ 应用程序加载的 C# DLL?

【问题讨论】:

    标签: c# c++ plugins interop


    【解决方案1】:

    不是直接的,但您可以在 C++/CLI 中编写一个 shim,导出本机函数,然后将实际实现委托给 C# 程序集。

    但是请记住,这可能是个坏主意——在给定进程中只能运行一个版本的 CLR,因此如果其他人为 C++ 应用程序编写托管插件与您的插件所针对的 CLR 版本不同,则会导致致命的运行时错误。

    【讨论】:

    • @SofaKng :这正是 C++/CLI 存在的原因,因此任何 C++/CLI 教程都可能涵盖类似的内容。
    • 从 Framework 4.0 开始,它们现在支持将多个版本的 CLR 加载到单个进程中,请参阅术语 In-Process Side-by-Side 或 In-Proc SxS。据我了解,其中一个用例是专门针对插件的。
    【解决方案2】:

    This project 为类中的静态方法创建 dll 导出。这可能是更清洁的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多