CGI/ISAPI问题请教...(100分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
CGI/ISAPI里能否实现类似ASP里的Application变量的功能?

就是说,有一个全局变量,一旦ISAPI第一次被调用时定义, 以后
只要浏览器没有关闭,这个变量一直存在,而且是全局的,不管这
期间调用了多少次这个ISAPI DLL. 当浏览器关闭时(在ASP里面
叫Seesion_End),这个变量被自动释放.
 
在Dll中用共享内存试一下
library demo;
var
share:integer;
MemFile, demoMutex: THandle;
procedure IntoDll; stdcall;
begin
// called everytime when the dll is injected into another context
Mutex:=CreateMutex(nil,True,'demo');
MemFile:=OpenFileMapping(FILE_MAP_WRITE,False,'demo.dat');
if MemFile=0 then
MemFile:=CreateFileMapping($FFFFFFFF,nil,
PAGE_READWRITE,0,SizeOf(THookRec),'demo.dat');
share:=MapViewOfFile(MemFile,FILE_MAP_WRITE,0,0,0);
if MemFile=0 then
share:=1;
inc(share);
ReleaseMutex(HookMutex);
end;
procedure ExitDll; stdcall;
begin
try
WaitForSingleObject(demoMutex,INFINITE);
dec(share);
finally
ReleaseMutex(demoMutex);
end;
if share=0 then
begin
UnmapViewOfFile(share);
CloseHandle(MemFile);
CloseHandle(demoMutex);
end;
end;
procedure DLLEntryPoint(reason:integer);
begin
case reason of
0: {DLL_PROCESS_DETACH} ExitDll;
1: {DLL_PROCESS_ATTACH} IntoDll;
end;
end;
begin
Intodll;
DLLProc:=@DLLEntryPoint;
end.
 
也许我没有说清楚, 我说的这个变量对每个用户来说是独立的, 就是说:
一个用户,一旦第一次调用了ISAPI, 就产生这个变量, 以后他每次调用
都可以共享这个变量,除非他关闭了浏览器. 而别的用户不能共享这个变量.

大概有点类似与"会话期"这个概念吧?
 
就这样把.
 
后退
顶部