我有一个用 C# 编写的 .net 程序集,我希望从程序集中导出本机 C 函数。
我有一个应用程序,它将对“插件”文件夹中的任何 DLL 执行“LoadLibrary()”。加载 DLL 后,应用程序执行“GetProcAddress”以查找名为“Register”的函数。应用程序希望此函数遵循 C 调用约定。
如何从我的 .net 程序集中导出名为“Register”的函数,以便成功连接该应用程序的插件系统?
谢谢,安德鲁
我有一个用 C# 编写的 .net 程序集,我希望从程序集中导出本机 C 函数。
我有一个应用程序,它将对“插件”文件夹中的任何 DLL 执行“LoadLibrary()”。加载 DLL 后,应用程序执行“GetProcAddress”以查找名为“Register”的函数。应用程序希望此函数遵循 C 调用约定。
如何从我的 .net 程序集中导出名为“Register”的函数,以便成功连接该应用程序的插件系统?
谢谢,安德鲁
使用这个工具。
在托管 C++ 中编写一个 .Net 库,您可以在其中导出“本机”方法/函数。
遗憾的是 Microsoft 不支持此功能,您必须在构建后更改 msil 以公开这些方法。有可能有人在codeproject或here上展示了一个合理的解决方案,但它需要一个后期构建步骤,之后你就得靠自己了。我不知道这个 hack 是否适用于 .net 4.0 或更高版本。希望 Microsoft 会倾听我们的意见并支持 C# 中的这个简单功能,因为 CLR 支持已经存在。
你想要的是一个Reverse P/Invoke。您实际上不能在 C# dll 中嵌入 C 函数,如果您的意思是在 C 中实际实现的函数,但是按照链接页面上给出的教程,您可以创建可由非托管 C/C++ 代码调用的 DLL 导出.