我真的需要帮助...
我已经用IDL实现了一个COM组件(即A.dll),也为该组件编写了一个包装DLL(B.dll)。我已经为DLL“A”实现了必需的导出功能,并将其注册为“regsvr32.exe”。
问题是我有3个EXE文件,它们使用B.dll来访问A.dll的方法。但是,我无法为A.dll创建本地服务器,因此每个EXE都会加载一个新的A.dll和B.dll。我只想加载A.dll一次,并且需要在B.dll中实现这个功能。最后声明也可供讨论。
但是,我无法找到有关此问题的任何有用示例或资源。任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:1)
没有“创建本地服务器”这样的东西。必须将进程内服务器加载到每个使用者进程中,没有办法 - 每个使用者都是一个单独的进程,因此它有自己的代码和数据副本。
为了让一个进程为所有使用者执行COM服务器代码,您必须创建一个out-proc服务器。要执行后者,您可以重新设计COM服务器或尝试使用COM +服务器应用程序。这样,您就可以拥有一个运行多个消费者可以连接的COM服务器代码的独立进程。
答案 1 :(得分:1)
由COM调解的DLL称为进程内服务器。这表明您的问题:它将始终映射到其客户端的内存空间,就像任何其他DLL一样。类似地,任何 it 加载的DLL都将映射到原始进程中。您的问题为什么您不想使用DLL,这一点尚不清楚。如果是为了节省资源,那么考虑只复制数据;代码只会加载一次。如果是因为您希望它们共享数据,那么请考虑使用共享内存。如果你真的希望所有三个.exe都由一个实例提供服务,那么你需要的是一个COM本地服务器,它将由.exe实现,而不是.dll。