尝试构建 C# NPAPI 插件我发现了一个教程,它描述了您的 dll 需要实现许多方法,例如NP_GetEntryPoints
,NP_Initialize
以及NPP_New
其他一些方法。
但是我想了解的是,如果我可以简单地镜像这些方法名称并按照 C# 中的文章(如 )中的描述构造等效的数据结构,那么_NPPluginFuncs
一切都会正常吗?
有人可以提供一些指导吗?是否可以在 C# 中构建 NPAPI 插件,如果可以,涉及的基本步骤是什么?
如文档中所述:
NPAPI 浏览器插件的核心只是一个带有几个特定入口点的 DLL
这意味着您需要从常规 dll 中导出一些函数,这通常在 C/C++ 中完成。不幸的是,不可能从普通的 C# dll 公开任何入口点,但看看这个答案,通过一些努力似乎可以通过某种后期构建工具来欺骗一些导出。
无论如何不要期望从/向插件接口传递太多复杂的数据结构,这将是一件痛苦的事情。如果您有兴趣进行更多研究,则使用的关键是“反向 P/Invoke”,类似于从托管世界调用常规 dll 的直接 P/Invoke。
C# dll 不能直接公开“入口点”的原因是 入口点实际上只是 dll 内的某个地址,指向一些立即可执行的汇编代码。C# dll 是不同种类的野兽:它们只是包含“及时”编译的 IL 的文件,实际上这种编译是通过一些操作系统技巧强制 AFAIK 进行的。这就是反向 P/Invoke 根本不直接的原因。
正如 Georg Fritzsche 在他的评论中所说:
NPAPI 插件基本上是带有一些必需的 C 导出的 DLL
并且没有内置方法可以从用 C# 编写的程序集中导出函数(在 C 导出意义上)。
您的一些选择是: