代码之家  ›  专栏  ›  技术社区  ›  CDR

同一进程中两个DLL之间的通信

  •  0
  • CDR  · 技术社区  · 15 年前

    我有一个加载“aaa.dll”的应用程序。aaa.dll“加载另外两个dll”bbb.dll“和”ccc.dll“。

    a a a.dll是不是由我自己编写的第三方dll。但是bbb.dll和ccc.dll是我写的。

    bbb.dll和ccc.dll之间是否有任何通信方式?指出任何资源都是非常有用的。

    通信类型:我需要将状态从bbb.dll发送到ccc.dll。

    谢谢大家。loadlibrary()/getprocaddress成功了。我想确保bbb.dll不加载ccc.dll的第二个副本。另外,进程间通信似乎对我所需要的是进程内通信来说是致命的。

    再次感谢大家。

    5 回复  |  直到 15 年前
        1
  •  1
  •   ilmcuts    15 年前

    ccc.dll应导出“setstate”函数。然后,bbb.dll可以在需要时调用所述函数。您需要静态地或通过loadlibrary/getprocaddress将bbb.dll链接到ccc.dll。

        2
  •  4
  •   John Saunders    15 年前

    DLL不通信。课堂交流。想想那些需要相互交流的课程,答案就会清楚得多。

        3
  •  3
  •   Bhushan Bhangale    15 年前

    您可以直接进行API调用。它在同一进程中,因此静态对象也将被共享。

        4
  •  3
  •   Andrey    15 年前

    您可以使用任何广泛的win32 ipc工具-共享内存、互斥、事件等。提供您需要的通信类型的详细信息,论坛将为您提供更具体的建议。

        5
  •  1
  •   David Anderson    15 年前

    您需要第三个程序集作为两者之间的接口。此接口程序集将导出其他两个程序集之间进行通信所需的所有对象和/或方法。

    下面的例子当然是考虑.NET作为平台,但是在Win32/C++项目中可以使用相同的精确概念。

    在建筑方面,这是一个困难的问题。.NET中的两个dll不能直接通信 但是,如果没有一些开销,您可以进行通信 方式。原因是您只能从另一个程序集引用一个程序集,否则将有一个循环引用。

    不过,有一个简单的解决方案,但这需要您的三个组件。采用以下组件:

    • 接口DLL
    • 客户端DLL
    • 服务器DLL

    只要说出名字,你就应该能够很好地了解这将如何工作。基本上,interface.dll将包含client.dll和server.dll相互通信所需的公开对象。client.dll和server.dll都会引用和interface.dll来访问这些对象。

    使用该方法,两个程序集都可以访问任何一个程序集需要通信的所有对象。interface.dll还包含client.dll和server.dll都需要通信的公开方法。因此,它可以包含例如client.dll或server.dll可以使用的“send”和“receive”方法。

    您必须为此开发某种通信标准。

    • 这些程序集将如何相互通信?
    • 这些程序集将如何通信?

    有了这两种说法,无论您是在通信实际的类和对象,还是仅仅是消息,第三个处理这一问题的程序集都将毫无瑕疵地工作,只要您在体系结构和设计中付出了努力。

    不要把名字放在心上,client.dll、server.dll和interface.dll都只是一个常见方法论的例子,说明如何完成这样的任务。使用此方法,将不存在循环引用,因此程序集可以通过两种方式而不是一种方式进行通信。