编程语言
首页 > 编程语言> > C#-Excel Interop:使用Task.Run创建实例会导致异常System.EntryPointNotFoundException

C#-Excel Interop:使用Task.Run创建实例会导致异常System.EntryPointNotFoundException

作者:互联网

这是产生问题的最小示例:

using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Excel = Microsoft.Office.Interop.Excel;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() =>
        {
            Excel.Application app = new Excel.Application();

            if (app != null)
            {
                app.Quit();
                Marshal.FinalReleaseComObject(app);
                app = null;
            }
        });
    }
}

这导致以下异常:

日语的最后一部分说,找不到DLL advapi32.dll入口点的“ EventSetInformation”.
我很难理解发生了什么.基本上为什么会抛出此异常,它试图告诉我什么?

解决方法:

我的示例中的异常是Windows 7上的VS 2013产生的.
在这种情况下,无法解析对EventSetInformation的调用,因为在advapi32.dll中找不到该函数.
然后,我使用Visual Studio 2015 CTP测试了相同的代码,并且毫无例外地运行到完成.这使我相信这是版本冲突.

另外,根据heremsdn,在Windows 8中将advapi32.dll添加到EventSetInformation.这就是为什么当我使用VS 2013运行代码时找不到它的原因.因此,要运行我的代码段,我需要较新的版本. advapi32.dll,该文件包含在更高版本的Visual Studio(或Windows 8)中.

更新

根据https://github.com/dotnet/coreclr/issues/974

Note that the OS group has assured us that Win7 will be patched to
include this API soon (within months), so that even the exception will
not happen at that point

因此,很可能在将来的某个时间将Windows 7上的advapi32.dll更新为包括EventSetInformation.

标签:task,excel-interop,c
来源: https://codeday.me/bug/20191028/1952185.html