目前的项目需要在asp.net中使用一个由客户提供的dll (用COM写的)。搜索了csdn以前的问题解答,我用了tlbimp.exe对dll文件进行wrapping, 然后在add reference 中加入了wrapped 后的dll文件。最后,用regsvr32对原dll进行了注册。都搞定后,在我的c#代码中加入了如下几行:using DLLNamespace;private void Page_Load(object sender, System.EventArgs e)
{
    //early binding 
    DllNamespace.COMClass COMInstance = new DllNamespace.COMClass();
    try 
   {
      ((DllNamespace.COMClass)COMInstance).dosth();
   }
   catch (Exception ex)
   {
       Response.Write("Exception in COMClass: " + ex.Message);
   }
            
}奇怪的是,除了第一次能够正常运行之外,其后几次都会throw一个“java.lang.NullPointer Exception”. 我想有两种可能,一是原dll文件是用java写的,所以才会抛出java异常。二是.net的garbage collection 对COM不起作用。于是,我就在((DllNamespace.COMClass)COMInstance).dosth();后面加了句COMInstance.destroy();重新启动机器和VS,但结果还是一样。各位高手们,帮我看一下。谢谢。

解决方案 »

  1.   

    java.lang.NullPointer Exception??what kind of com component? have you tried<%@ Page AspCompat="true" %>although it affects performance
      

  2.   

    private void Page_Load(object sender, System.EventArgs e)
    {
        if (!IsPostBack)
       {
        //early binding 
        DllNamespace.COMClass COMInstance = new DllNamespace.COMClass();
        try 
       {
          ((DllNamespace.COMClass)COMInstance).dosth();
       }
       catch (Exception ex)
       {
           Response.Write("Exception in COMClass: " + ex.Message);
       }
            
      }    
    }
      

  3.   

    to properly release the com component, you should useSystem.Runtime.InteropServices.Marshal.ReleaseComObject(yourObject);see
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q317109
      

  4.   

    To 思归老大,我又看了一遍code, 的确已在 aspx 文件中设置了aspcompat为true, 如下:
    “<%@ Page aspcompat="true" language="c#" Codebehind="Gifting.aspx.cs" AutoEventWireup="false" Inherits="MazamaWeb.Gifting" %>”我也觉得奇怪,会抛出“java.lang.NullPointer Exception”,会不会是因为COM是用java写的。客户提供的COM文件是一个dll文件。To goody9807(), 还是一样。
      

  5.   

    to 思归老大,destroy()方法是COM中提供的,我就拿来直接用了,不知会有什么问题没有。是否会导致抛出异常?