代码之家  ›  专栏  ›  技术社区  ›  baris.aydinoz

如何将dll加载为本地服务器

  •  0
  • baris.aydinoz  · 技术社区  · 14 年前

    我真的需要帮助…

    我用IDL实现了一个COM组件(即a.dll),还为该组件编写了一个包装dll(b.dll)。我已经为dll“a”实现了所需的导出函数,并将其注册为“regsvr32.exe”。

    问题是我有3个使用b.dll访问a.dll方法的exe文件。但是,我无法为a.dll创建本地服务器,因此每个exe都加载一个新的a.dll和b.dll。我只想加载一次a.dll,需要在b.dll中实现此功能。最后一句话也可供讨论。

    但是,我找不到关于这个问题的任何有用的例子或资源。如有任何帮助,请提前感谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Oliver Bock    14 年前

    由COM介导的DLL称为进程内服务器。这就暗示了您的问题:它总是被映射到客户机的内存空间中,就像其他dll一样。类似的任何DLL 加载将映射到原始进程中。你的问题不清楚 为什么 您不想使用DLL。如果要保存资源,则考虑只复制数据;代码只加载一次。如果这是因为您希望他们共享数据,那么考虑使用共享内存。如果您真的希望三个.exe都由一个实例提供服务,那么您需要的是一个COM本地服务器,它将由.exe而不是.dll实现。

        2
  •  1
  •   sharptooth    14 年前

    没有“创建本地服务器”这样的事情。必须将进程内服务器加载到每个使用者进程中,这是不可能的——每个使用者都是一个单独的进程,所以它有自己的代码和数据副本。

    为了让单个进程为所有使用者执行COM服务器代码,您必须创建一个out-proc服务器。要执行后者,您可以重新设计COM服务器或尝试使用COM+服务器应用程序。通过这种方式,您可以有一个单独的进程来运行COM服务器代码,一些使用者可以连接到该代码。