CSDN博客

img uheart

asp_dll

发表于2003/7/7 8:25:00  602人阅读

分类: 网站开发

CSDN - 文档中心 - ASP    
标题     ASP中DLL的调试环境配置全攻略    smuzy(原作)
关键字     ASP DLL 组件 三层 VB Frontpage InterDev 调试

现在正在搞三层开发,用ASP和VB6.0,但是现在苦于没有找到合适的方法来调试自己写的DLL文件,效率相当低。

我用了几种方法:
1.在IIS中选择卸载,然后用VB重新编译,覆盖掉原来的DLL
2.在IIS中选择一个你调试的站点,停止,然后编译覆盖,然后启动,再在IE中刷新页面。
3.在命令行执行Regsvr32.exe -u 文件名 然后编译覆盖 刷新

但是上面的方法不总是凑效,我用Frontpage做ASp页面的时候没有什么问题,但使用InterDev的时候总是报告DLL文件被锁定,不能覆盖的错误。有的时候把InterDev关掉(或者仅仅是关掉里面所有正在编辑的文件),也能凑效,但是不总是这样。
我想用InterDev做开发,比较方便,但是找不到更好的方法。
这个问题困扰我好久了,我想大家做组件开发的都有这个迷茫

----------------------------------------------------------------


我今天下午试了一下下面的方法不知道会不会让大家笑话,但是我真的解决了问题了
并且今天一下午都自我感觉良好
不过我用的是.NET的开发环境
具体如下:
1.安装.NET,当然这个对系统的资源耗费很大,安装以后普通的机子会运行得很慢,如果你的自愿比较紧张还是放弃这个方法吧。(后来我发现在frontpage下和interdev下也可以实现,哈哈。不要埋怨,因为我的话而装了一个.net却发现没有多少用处,但是我用过之后却是爱上他了。)
2.建立一个存放DLL的文件夹。然后我们的最“出色”的地方体现出来了:在这个文件夹下建立若干个空的子文件夹命名从01开始到你希望的数值为止。
3.启动IIS管理器
4.打开VB6你的工程
5.现在如果你要调试的话可以直接编译啦,然后任意指定一个第二步建立的文件夹,我想还是从01开始吧。
你刷新一下你调试用的ASP页面,看见了吗?内容已经是你写的新的DLL文件的了

以上只是开机后第一次调试。我在调试的过程中发现了不少错误,我总是这么大意吗?呵呵,但愿你不是这样的:)
现在我需要修改DLL了,修改完成后重新编译,你发现你不能覆盖刚才的DLL了,因为你已经在页面里面调用了这个组件,他已经被放进内存,写保护锁定了。你需要在IIS管理器里面把你的站点停掉.如果你用的是.net,你会发现这样是可行的,但是其他的开发环境不一定和你想的一样,现在你第二步建立的那些个文件夹们就会管用了,找其中的一个文件夹(该是02了...),把新的DLL放在这里。然后启动站点(不要让他重启,太慢了,以上步骤最简洁的方法就是在IIS选中你的站点,按最有上角的█,然后▼)(我没有找到▼,你只能把▼顺时针旋转30度读了^_^)

怎么样?
问题解决了吧?

我推荐使用.net,因为使用它,你不需要和interdev一样进行reference,只要直接在其中写扩展名是ASP的页面,然后代码中每一个对象都用server.createobject("")的方法得到,他就会自动显示你方才编译过的最新的DLL中的类的方法和属性了。
如果你不想使用的codeinsight话我想frontpage也是很好的工具。

我的方法是不是很笨啊?

我不用VB.net或者是C#是因为我现在的工作是封装代码而不是重新一个工程
鉴于vbscript和.net中语法的差异,我还是选择这个笨笨的方法了,并且自己认为VB写DLL也许性能会更好一些,不是吗?



作者相关文章:
  • HTML在线编辑器Word XP(收藏)


  • 对该文的评论 人气:1003
         lejin(2003-7-5 10:38:14)

    调试组件最好在xp里,这样免去重新注册的问题
         nittystone(2003-7-4 23:58:23)

    其实,最好是先在VB环境下写个简单的测试程序,调整DLL准确无误时再用ASP使用。这样就算再出错,也不会麻烦几次的。

    完全同意!!!!
         FamelStudio(2003-7-4 23:23:30)

    <script>'"
         mmmyyy12(2003-7-4 14:43:55)

    互联网下实现 打印, 报表, 图形分析的完美解决方案.
    源码100%开放,
    详情参见  http://www.fcSoft.com.cn
         c7654321(2003-7-4 11:27:37)

    其实,最好是先在VB环境下写个简单的测试程序,调整DLL准确无误时再用ASP使用。这样就算再出错,也不会麻烦几次的。
         FamelStudio(2003-7-3 21:59:29)

    1)如果你想单步调试你的VB DLL,按照下面文章中写的:在IIS中设置你的WEB APP的属性,使其允许DEBUG;编译你的VB工程,按F5使VB IDE处于调试状态;访问创建该组件的ASP页面。

    2)如果你仅仅想从内存中卸载该DLL(例如你想重新编译),有两个办法:

    A:打开COM+ Service Manager,在COM+ Applications中找到“IIS Out-Of-Process Pooled Applications”,在上面按右键,选择“Shut down”。原理是默认状态下IIS将WEB APP的Application Protection设置为“Medium (pooled)”,所有pooled app运行在同一个进程中(dllhost.exe)。如果你将你的WEB APP的Application Protection设置为low或者high,相应的你需要关闭“IIS In-Process Applications”或者其他Application。

    B:打开COM+ Service Manager,创建一个新的空Application,从资源管理器中将你的DLL拖拽到该Application的Components中。这样的话你的DLL会被创建在该Application的进程中。需要卸载DLL时关闭该Application即可(按右键,选择“Shut down”)。

    推荐方法B,因为方法B不会影响你的IIS应用,编译完后在浏览器中按刷新即可,所有的IIS Session都保持不变。

         FamelStudio(2003-7-3 21:31:40)

    HOWTO: Debug a Visual Basic DLL from Visual InterDev
    --------------------------------------------------------

    This article was previously published under Q200998
    SUMMARY
    This article demonstrates how to debug a Visual Basic ActiveX dynamic-link library (DLL) using Visual InterDev 6.0 or later.
    MORE INFORMATION
    The Component Object Model (COM) DLL needs to be registered on the computer that is creating the object (through Server.CreateObject).
    Step-by-Step Example
    Start Visual Basic on the computer where Visual InterDev will be used for debugging, and create a new ActiveX DLL.
    Change the name of the project to MyVBComponent.
    Change the name of the Class module to CMyClass.
    Add the following code to the DLL:
    Public Function DebugTest (vntNum1 as Variant, vntNum2 as Variant) as Variant
          DebugTest = vntNum1 + vntNum2
      End Function
                                           
    From the File menu, click Make MyVBComponent.dll.
    Set a breakpoint on the "DebugTest = vntNum1 + vntNum2" line in the DLL.
    From the Run menu, click Start (or press the F5 key) to run the program.
    Start Visual InterDev, and add a new Active Server Pages (ASP) page to the project.
    Add the following code to the new ASP page:
      <%
          Dim objMyComponent, vntNum1, vntNum2, vntResult
          vntNum1 = 1
          vntNum2 = 2
          Set objMyComponent = Server.CreateObject("MyVBComponent.CMyClass")
          vntResult = objMyComponent.DebugTest(vntNum1, vntNum2)
          Response.Write(vntResult)
      %>
                                           
    Place a breakpoint within the ASP page on the line that calls the DebugTest method.
    In the Project Explorer window of Visual InterDev, right-click this ASP page, and then click Set As Start Page.
    From the Debug menu, click Start (or press F5) to run the program.
    NOTE: If your project is not already configured within Microsoft Internet Information Server (IIS) for debugging, Visual InterDev prompts you to set this up. Click Yes in all of the dialog boxes that Visual InterDev presents, and Visual InterDev configures this automatically. Also note that the function keys that are used for debugging are different in Visual InterDev and Visual Basic.

    If the DLL is already loaded, you must restart IIS before you can debug the DLL, or you cannot stop on breakpoints. To restart IIS 4.0, type the following commands at a command prompt:
    Net Stop IISAdmin /y
    MTXSTOP
    Net Start W3SVC

    To restart IIS 5.0, type the following command at a command prompt:
    iisreset

    REFERENCES
    For additional information%1, click the article numbers below to view the articles in the Microsoft Knowledge Base:
    198432 PRB: Server Object Error 'ASP 0178' Instantiating COM Object

    259725 PRB: Error When You Debug COM+ in the VB IDE with ASP Client

    244272 INFO: Visual InterDev 6.0 Debugging Resources

         smuzy(2003-7-3 16:03:03)

    neu_leaf:
        我也意识到这个问题,重复的编译后,注册表中有好多冗余的注册项。但是我使用的时候到现在为止还没有因为这个出现过问题。我在自己做开发的机子上就这么用了,感觉非常方便。不知道会不会什么时候突然出现故障。

    你能不能详细的解释一下,如何把他注册到组建服务中,里面的有些选项我不是很清楚。

    至于iisreset则运行起来太慢了,我忍受不了。赫赫
         neu_leaf(2003-7-3 15:10:59)

    像你这样的编译,会导致注册表错乱!
    建议,对于一个组件服务器,即dll,在机器上面只保留一个注册,(可以采用版本支持,或者在重建一个之前把以前的删掉)!

    如果你觉得重新编译很麻烦的话,我建议:如果是在win2000下的话,可以把dll注册到组件服务中,要重新编译时只需停以下即可,很快,很简单;如果在无法使用组件服务的情况下,那就只用重起iis服务了。


         hnliuwx(2003-7-3 13:03:04)

    运行iisreset,然后重新编译dll,就可以覆盖了。
    0 0

    相关博文

    我的热门文章

    img
    取 消
    img