вызов неуправляемой библиотеки dll (с использованием атрибута DllImport) методом extern приводит к ненормальному поведению

#c# #windows #interop #dllimport

#c# #Windows #взаимодействие #dllimport

Вопрос:

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

Вызывающий class.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-м в каталоге).

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

Комментарии:

1. Чтобы определить проблему, подключите отладчик и посмотрите, что делает DoSomething функция. Это все, что можно сказать, учитывая предоставленную вами информацию.

2. ОК. Я попытаюсь подключить отладчик к приложению. Спасибо. Как вы думаете, есть ли что-то, связанное с Windows Vista (SP1)? Я сталкиваюсь с этой проблемой только с Vista.