вызов неуправляемого dll (с использованием атрибута DllImport) внешнего метода приводит к ненормальному поведению - PullRequest
0 голосов
/ 18 октября 2011

Я получаю странный вид моего приложения только в Windows Vista (SP1).При случайном вызове статического метода extern dll приложение перестает работать и неожиданно показывает, что загрузка процессора в диспетчере задач становится равной 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-м в каталоге).

Пожалуйста, дайте мне знать, как определить проблему в этой ситуации.

...