Memory management c-API的excelDNA内存管理

Memory management c-API的excelDNA内存管理,memory-management,Memory Management,我试图通过方法XlCall.TryExcel从excelDna调用xlfCaller,有时我得到了XlReturnStackOvfl,我找到了解决此问题的方法:1。在这个网站:,它说我们必须在xlfCaller之后调用xlFree,2。在,它显示“Excel DNA负责C API调用的所有类型转换和内存管理”。因此我想知道,我是否需要调用xlFree?excelDna总是在调用Excel C API后调用xlFree,因此我们不需要再次调用xlFree。以下是excelDna的源代码: priv

我试图通过方法XlCall.TryExcel从excelDna调用xlfCaller,有时我得到了XlReturnStackOvfl,我找到了解决此问题的方法:1。在这个网站:,它说我们必须在xlfCaller之后调用xlFree,2。在,它显示“Excel DNA负责C API调用的所有类型转换和内存管理”。因此我想知道,我是否需要调用xlFree?

excelDna总是在调用Excel C API后调用xlFree,因此我们不需要再次调用xlFree。以下是excelDna的源代码:

private unsafe static int TryExcelImpl4(int xlFunction, out object result, params object[] parameters)
    {
        int xlReturn;

        // Set up the memory to hold the result from the call
        XlOper resultOper = new XlOper();
        resultOper.xlType = XlType.XlTypeEmpty;
        XlOper* pResultOper = &resultOper;  // No need to pin for local struct

        // Special kind of ObjectArrayMarshaler for the parameters (rank 1)
        using (XlObjectArrayMarshaler paramMarshaler = new XlObjectArrayMarshaler(1, true))
        {
            XlOper** ppOperParameters = (XlOper**)paramMarshaler.MarshalManagedToNative(parameters);
            xlReturn = Excel4v(xlFunction, pResultOper, parameters.Length, ppOperParameters);
        }

        // pResultOper now holds the result of the evaluated function
        // Get ObjectMarshaler for the return value
        ICustomMarshaler m = XlObjectMarshaler.GetInstance("");
        result = m.MarshalNativeToManaged((IntPtr)pResultOper);
        // And free any memory allocated by Excel
        Excel4v(xlFree, (XlOper*)IntPtr.Zero, 1, &pResultOper);
    
        return xlReturn;
    }