在vc上建了一个工程,
里面有段程序是 根据页面(http://..../index.html)(在服务器A上)的上存在的值进行下一步工作,比如:判断一个页面上存在一个字符串allow,那么程序继续,假如存在一个字符串deny,那么程序结束。之后,这个vc工程生成一个dll文件.
在某台服务器B上进行注册这个dll文件之后,可以正常使用,
就是假如index.html页面上存在allow,那么服务器B可以使用,进行下一步工作
假如index.html页面上存在deny,那么服务器B不能继续下一步工作。问题来了
我现在index.heml所在的服务器A上更改过,把字符串allow变成deny,重启过这台服务器A之后,事实上index.html页面上已经不存在allow字符串了,那么服务器B应该就不能继续下一步工作才对。
事实上,只有重启过服务器B之后,这个dll文件才起作用。怎么样才能不启动服务器B,让dll文件动态起作用呢?可以这样的吗?

解决方案 »

  1.   

    尝试用动态连接
    然后在TIMER事件里判断
      

  2.   

    应当是HTML文件本地缓存导致的,解决的方法是不再使用WEB页面缓存,当然,你测试的是静态页面,如果你将来应用到实际中,当你扫描网站页面的时候,被拒绝的访问肯定是通过ASP或者其他程序实现的.
      

  3.   

    lidongri(海浪)与shawnwan() 
    哪里 尝试动态连接???
      

  4.   

    A为什么能在B上面生成一个dll?
    这个dll需要注册,那我估计是个com。
    A要远程调用,那我估计是个DCOM。
    那么,为什么要阻止dll加载到内存?为什么不限制A的调用?
      

  5.   

    实在惭愧~~简单来说就是怎么让dll文件动态执行。A没有在B上生成dll
    A只是指http://.../index.html静态页面所在的服务器而已
    总之就是一dll文件,生成这个dll文件的源码里面需要判断index.html源码里是否存在某一字符串,dll文件在服务器B注册(regsv32)之后,我修改了index.html文件的字符串,但是dll文件没有动态的根据index.html的变化而改变。
      

  6.   


      /*调用动态dll*/
      typedef void(__cdecl *TESTDLL)(CurrentData str);//str动态库参数
      HINSTANCE hmod;   /*调入动态库*/
      hmod = ::LoadLibrary("mfcdll.dll");   if (hmod == NULL)
      {
     AfxMessageBox("Fail");
      }   TESTDLL lpproc;
      lpproc = (TESTDLL)GetProcAddress(hmod, "Show");//Show为动态库里的函数名   if (lpproc != (TESTDLL)NULL)
      {
      /*执行动态库中的函数,传递参数,打开窗体*/
      (*lpproc)(cd);
      }  FreeLibrary(hmod);
      

  7.   

    alfwolf(木马煞)
    应当是HTML文件本地缓存导致的,解决的方法是不再使用WEB页面缓存,这个哪里设置的?
      

  8.   

    谢谢 lidongri(海浪)  先
    看了一下你的代码,应该是指动态引用 dll文件的程序我的意思是指,这个dll文件中的一段程序是:
    首先获取网页的html内容,用CString.find去查找是否存在allow或者deny字符串
    有allow则赋值i=1,有deny则赋值i=0;然后根据i的值进行下一步工作。这个dll文件在服务器上注册(regsvr32 ...dll)使用,而不是其他的代码程序去动态调用此dll中的函数。现在问题就是 我把这个html更改过,把allow字符串改为deny,i还是为1,而不是为0。
    说明获取网页的html内容的时候,没有去html服务器上进行重新读取,可能是用了缓存之类的,
      

  9.   

    internet 选项 高级 ?
      

  10.   

    这个设置过
    Internet 属性-Internet临时文件-设置   已经是设置为每次检查了.... 还是有其他设置的?看一下我获取网页内容的代码:IXMLHTTPRequestPtr httpRes;
    ::CoInitialize(httpRes);
    HRESULT hr = httpRes.CreateInstance("Msxml2.XMLHTTP.3.0");
    try{
       httpRes->open("Get", _bstr_t(url), false, "", "");
       httpRes->send(); 
       }是不是执行两次这段代码的时候,第二次会不会是从缓存上读取的?而不是再从服务器上读取?
      

  11.   

    谢谢 lidongri(海浪)  先
    =======================================
    兄弟客气了给个思路,你看可行不可行使用timer事件
    每次执行的时候都重新从服务器上获取数据,不过以前的缓存数据一定要清空
    然后执行相关操作
    应该没什么问题了