调用非托管DLL(使用DllImport属性)extern方法会导致异常行为

时间:2011-10-18 14:17:43

标签: c# windows interop dllimport

我只在Windows Vista(SP1)上获得了应用程序的奇怪行为。 在随机情况下调用dll的静态extern方法会使应用程序停止工作,突然显示任务管理器中的CPU使用率变为00,而内存(私有工作集)保持静态。

在Windows XP和Windows 7应用程序上行为正常。

我将在这里展示一些示例代码。

DllWrapper.cs

    public class DLLWrapper
    {
        private const string dllTest = @"DLLTEST.dll";

        [DllImport(dllTest)]
        internal static extern bool DoSomething(string sPath1, string sPath2);
    }

CallingClass.cs

    //CallingClass Method
    private void MoveFile(string sInputPath, string sOutputPath)
    {
        try
        {
            //get all xml at input
            string[] arrFiles = Directory.GetFiles(sInputPath, "*.xml");

            //loop: through all xmls in directory
            foreach (string sFile in arrFiles)
            {
                //cond: check dosmething successful
                //calls extrenal dll method 
                if (DLLWrapper.DoSomething(sFile, sOutputPath))
                {
                    //add something to log
                }
                //cond: dosomething false
                else
                {
                    //add log failure
                }
            }               

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return;
        }
    }

现在日志文件有时会记录成功,但应用程序进度会在随机xml文件上停止(可能在第5个xml文件上,也可能在目录中的第120个文件中)。

请告诉我如何识别这种情况下的问题。

0 个答案:

没有答案