请问:远程数据模块是否放在dll里比较好?(50分)

  • 主题发起人 主题发起人 trancebaby
  • 开始时间 开始时间
T

trancebaby

Unregistered / Unconfirmed
GUEST, unregistred user!
因为好像Multiple Instance只有在dll里才能选吧?
如果在exe里,一有客户连接就会运行一个实例,比较讨厌.
是不是这样?
 
还有,如果在DLL里,能否自动启动呢?
 
trancebaby你错了,实例模式只对EXE服务器有效,对DLL类型被忽略。
不论采用什么类型的服务器,一般都会创建一个新的实例。如果将远程模块放在DLL
里可以采用MTS,或则自己创建一个代理EXE来负责启动DLL类型服务器。
 
那么怎样创建一个代理exe,
是不是很复杂,如果是的话我就不尝试了.
 
同志,你才错了呢.
我试过了,可以编成dll服务器的,不过需要注册一下.
不过我也说错了,其实Multiple Instance都可以选的,
只不过dll不像exe那样生成对应的实例,就装载一次吧.
 
如做成DLL的话,
一启动,那不就与数据总是联接的吗?
而且好象不会自退了啊!
 
1?这倒是个问题.这个不知能不能编程解决呢?
 
to trancebaby: 你真的错了,如果在本地运行是DLL还是EXE都没有关系,但想在远
程启动DLL类型的服务器,如果不用代理或MTS(其实也可理解为代理服务器进程)的话你试一试?其实DLL必须被装载到某个进程空间,没有代理进程存在的话,远程的
DLL被装载在哪个进程中?千万不要告诉我它将装载在你的客户进程中!
 
>DLL被装载在哪个进程中?
不要问我啊,我实在是个新手,
我也想知道这个问题的答案.
和怎样编个代理服务器进程?要不然dll老在内存里,感觉真不好.
有答案吗?分全给啦.
 
首先,如果是生成Exe文件,不管有几个客户端,只会有一个应用程序服务器
的实例。另外,如果生成Dll,在NT服务器上的MTS控制台注册之后,如果没
有客户端连接上来,MTS服务不会启动,Dll不会加载。在本地Win98上直接注
册这个动态链接库也是一样的。
 
如果使用MTS的话,DLL将被自动被加载在MTS的地址空间中(进程)。如果不使用
MTS,简单的做法可以自己编写一个EXE型服务器,然后由它为你创建所需要的各
种存放在DLL中对象,并将接口指针返回客户端(客户端获得接口罗嗦一点)。
我认为你的问题并不在于是否需要一个代理EXE,而是如何释放不再使用的DLL库
的问题,有很简单就可解决这个问题,首先需要编写并挂接Application.OnIdle
事件,在该事件中加入一行释放无用DLL库的API函数,好像是FreexxxxLibaray
具体名称我记不清楚了,如果你还查不到的话,晚上我给你准确的API名。它的原
理就是:在主程序没有事情做的情况下清理已装载但不再使用的DLL库。
 
释放库函数找到了:CoFreeUnusedLibraries
 
非常感谢.
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部