是否有可能限制DLLfunction?

比方说,我希望我的客户能够为他们的应用程序创build插件,但我不想让他们用我的程序的内存捅了一下,有没有可能防止这种情况?

或者将DLL加载到一个不能访问主程序内存的区域?

您可以让插件在单独的进程中运行。 任何插件所需的信息都会作为消息传递给该进程。 应用程序需要的任何结果都将作为消息接收。 您可以为每个插件分别创建一个进程,也可以让所有插件在同一个进程中运行。

另外,插件功能的大多数现代版本都使用嵌入式运行时环境,例如JVM。 然后,插件运行在与应用程序相同的进程中,但在虚拟环境的范围内,这有效地限制了插件可能破坏您的程序的破坏。 在这种情况下,没有DLL,但脚本代码或字节代码。

最简洁的答案是不”。

很长的回答:一个DLL被加载到内存中,并且从进程的角度和操作系统的角度来看,似乎都是可执行文件本身的一部分,用于所有意图和目的。 当然,DLL(可能)在多个可执行文件之间共享,所以操作系统需要跟踪一个特定DLL的“用户”数量,但是从一个进程的角度来看,它是可执行文件的一部分。 它是一个单独的地址范围,但是对于DLL内容的权限和权限与任何其他DLL或主要可执行文件本身是完全一样的。

如果你有插件,你需要信任插件。 如果这不是你想要的,那么不要使用DLL模型来创建插件(例如,使用共享内存区域和另一个可执行文件来允许访问共享内存)。