用C#构建NPAPI插件

尝试构建一个C#NPAPI插件我发现了一个 tutorial,它描述了你的dll需要实现一些方法,如NP_GetEntryPoints,NP_Initialize和NPP_New以及其他一些方法.

但是我想要理解的是,如果我可以简单地镜像这些方法名称并构建等效的数据结构,如C#中的文章(如_NPPluginFuncs)所述,一切都会有效吗?

请有人能够提供一些指导吗?是否可以在C#中构建NPAPI插件,如果是这样,涉及的基本步骤是什么?

解决方法

如文档中所述:

A NPAPI browser plugin is,at it’s core,simply a DLL with a few specific entry points

这意味着您需要从常规dll导出一些函数,这通常在C/C++中完成.不幸的是,不可能从普通的C#dll,but look at this answer中公开任何入口点,只需付出一些努力就可以通过某种后期构建工具欺骗某些导出.

无论如何不要期望从插件接口传递太多复杂的数据结构,这将是一件痛苦的事.如果你有兴趣做更多的研究,那么使用的关键工作是“反向P /调用”,类似于从托管世界调用常规dll的直接P / Invoke.

C#dll无法直接暴露“入口点”的原因是入口点实际上只是dll中的一些地址,这些地址可以立即执行某些汇编代码. C#dll是不同类型的野兽:它们只是包含IL的文件,编译为“Just In Time”,实际上这样的编译是强制AFAIK with some OS tricks.这就是反向P / Invoke根本不是明星前进的原因.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...