哥哥你们好!!
能给个普通的DLL编写的例子给我吗?!!!我想用一个DLL进行复杂的计算,如果用在EXE里会导致我的程序在运算期间
无法响应任何鼠标和键盘事件,甚至连窗体显示都出现问题!!所以我想写一个DLL来后台运算。但是我从来就没有写过!
能否传递一个自定义数组给DLL然后 DLL把计算到的结果保存到自定义数组。
后则您有更好的方法吗?!谢谢!
我刚听说:用VB做成的ActiveX dll也是一样不能响应的.它一样不能异步操作的.
是真的吗?我的这个函数因为有几层超长的for循环
for i=1 to ?
     for i2=1 to ?
         for i3=1 to ?
因为我要遍历注册表下某个subkey下面的所有subkey
我的思路是:1. 我建立了一个长abc(60000) as string 的数组用来保存获得所有subkey
2. 比如遍历HKEY_CURRENT_USER
3. 先用api获得它的第一层所有的subkey (假定20个)
   让后把这20个subkey存入数组1~20
   再用api 获得每一abc(1~20)中的subkey 存入abc(20~?)里
   然后再取新村如abc()的subkey再for...
   以此类推....
   这样可以获得所有的subkey但是窗体就无法响应了555555大概我的思路就是 比如遍历 结果就出现窗体不响应了,大家帮帮我弟弟界解决这个问题阿!

解决方案 »

  1.   

    嗯,酱紫啊~~如果你只想要gui响应用户输入的话,在每个循环的开始或者结尾加个DoEvents吧不过这么做也只是部分解决问题,如果你的循环体中调用的函数本身就占用大量cpu时间的话(比如I/O操作,访问网络什么的),还是会有不能相应的情况发生完全解决问题就需要用到异步调用,最简单的办法是做一个进程外服务,就是vb的ActiveX EXE类型工程(ActiveX Dll工程不行,即使你把它部署在远程的计算机上,它还是一个同步调用)。
      

  2.   

    对于超长运算一般都是首先从算法着手,优化算法是最重要的,此外可以用线程,写active dll的确不是一个好的方式,不过在VB编译后的程序运算效率还有是很高的。楼上的active exe偶还没有用过,关注.
      

  3.   

    做法大致是这样:1、创建一个ActiveX EXE工程首先你需要一个定时器,可以使用win32 api(vb sample里也有一个timer对象,好像就是对win32的timer api的封装)或者别的什么定时器,如果你不觉得恶心,也可以多创建一个窗体,使用vb的timer控件,呵呵然后给EXE工程添加一个类C:
    给C添加一个代表计算完成的事件E,你的算法将在这里实现,记得声明一个参数作为计算结果返回给调用方;
    给C添加方法M,在M里给你的Timer设置一个足够长的时间,退出M;
    在C中添加一个处理Timer事件的方法H,在这个方法里写上你要实现的函数,在计算完成之后,触发你定义的事件E。2、在调用方的窗体声明一个类型为C的对象o并处理它的事件(使用withevents关键字)
    在某个方法里调用o.M,通知o开始计算
    在o的E事件处理子过程里接收你想要的计算结果
      

  4.   

    做ActiveX EXE这种情况下你应该用do循环,而不是for循环
      

  5.   

    sogno(一觞一咏) 哥哥给我个例子看看阿
     我是新手阿
      

  6.   

    抱歉,我很忙,没有时间写代码给你到这些地方下载《vb6 组件工具指南》看吧,里边有step by step的例子http://www.piecust.jsol.net/jinjohn/wlsj/program/vb/这本书也是vs 6.0 msdn的一部分,可以在visual basic文档->使用Visual Basic->部件工具指南
    里找到