我在d-7中写了一个dll。它功能正常。它在应用程序启动时加载,在存在时卸载。
现在,该DLL也必须在该应用程序的服务器端工作,从COM +代理(dllhost.exe)加载,因为服务器基于com +技术。
问题是一个进程可能只有一个用于加载库的句柄。我不能在每个LoadLibrary调用上有单独的句柄。
在com +中,一个dllhost.exe可以为许多客户端提供服务,这意味着如果我加载一个外部库,它会为每个客户端调用提供相同的实例。
所以:
1)是否有可能以某种方式解决这个问题?
2)或者是否可以为每个客户端调用直接创建驻留在此dll中的类的实例?
3)或者如何通过为每个调用实例化一个内部类来使dll成为线程安全的。
提前感谢您的建议!
答案 0 :(得分:0)
由于DLL使用调用它的线程/进程的本地内存,我不确定你是否真的会遇到“问题”。您不希望DLL保留一些全局信息,因为这只会导致线程噩梦。
如果你在DLL中有一个函数返回一个对象引用(实际上是一个句柄),你也可以保证每个实例都有自己的信息可以使用而不是踩踏其他进程或线程。定义函数以返回您的TWhatever对象,让DLL创建它(TWhatever.Create())并将其返回给调用进程。然后由调用进程来释放对象。如果你需要COM +兼容性,那么应该可以使用接口引用(IWhatever)并从你的函数返回它。
如果每个线程处理自己的对象实例(或接口引用),那么您可以让DLL根据需要提供尽可能多的线程和进程。
你的问题让我困惑,所以我不确定我是否正确回答了这个问题。 :P