我用d-7写了一个动态链接库。它工作正常。它在应用程序启动时加载,在应用程序存在时卸载。
现在,该dll还必须在该应用程序的服务器端工作,因为服务器是基于COM+技术的,所以它是从com+代理(dllhost.exe)加载的。
问题是一个进程可能只有一个用于加载库的句柄。我不能在每个LoadLibrary调用上有单独的句柄。
在com+中,一个dllhost.exe可以服务多个客户端,这意味着如果我加载一个外部库,它会为每个客户端调用提供相同的实例。
所以:
1)是否有可能以某种方式解决此问题?
2)或者是否可以为每个客户端调用直接创建驻留在此dll中的类的实例?
3)或者如何通过为每个调用实例化一个内部类来使dll线程安全。
感谢您提前给我们提建议!
发布于 2011-08-29 22:14:07
由于DLL使用调用它的线程/进程的本地内存,我不确定您是否真的会遇到“问题”。您不希望让DLL维护某些全局信息,因为这只会导致线程噩梦。
定义返回TWhatever对象的函数,让DLL创建该对象( TWhatever.Create() )并将其返回给调用进程。然后由调用进程来释放该对象。如果您需要COM+兼容性,那么应该可以使用接口引用(IWhatever)并从您的函数中返回它。
如果每个线程都处理自己的对象实例(或接口引用),那么您可以让DLL为任意多个线程和进程提供服务。
你的问题把我弄糊涂了,所以我不确定我是否回答对了。:p
https://stackoverflow.com/questions/7226848
复制相似问题