#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.