Пройдя несколько небольших курсов и немного используя WPF и C #, я решил переписать приложение, над которым я работал. У меня большинство функций отлично работают в C ++ DLL, которую я создал и импортировал в мое приложение WPF.
Хотя у меня проблемы с некоторыми из них. Здесь я ранее передавал переменные из других функций или использовал диалоги и ящики сообщений.
Вот пример одной из функций C ++, которую мне нужно поместить в DLL. Функция генерирует хэш-код MD5 для списка файлов в списке, которые были добавлены с помощью OpenFileDialog.
array<Byte>^ Hash()
{
array<Byte>^ Buffer = nullptr;
int x = 0;
for each(String^ Files in listBox2->Items)
{
try
{
IO::FileStream^ FileStream = gcnew IO::FileStream(Files, IO::FileMode::Open, IO::FileAccess::Read);
IO::BinaryReader^ BinaryReader = gcnew IO::BinaryReader(FileStream);
IO::FileInfo^ FileInfo = gcnew IO::FileInfo(Files);
System::Int64 TotalBytes = FileInfo->Length;
Buffer = BinaryReader->ReadBytes(safe_cast<System::Int32>(TotalBytes));
FileStream->Close();
delete FileStream;
BinaryReader->Close();
MD5^ md5 = gcnew MD5CryptoServiceProvider;
array<Byte>^ Hash = md5->ComputeHash(Buffer);
String^ FileHex = BitConverter::ToString(Hash);
listBox3->Items->Add(FileHex);
x = x + 1;
}
catch(Exception^ e)
{
MessageBox::Show(e->Message->ToString());
listBox1->Items->RemoveAt(listBox1->SelectedIndex);
}
}
return Buffer;
}
Этот код прекрасно работает в моем приложении C ++, которое я сделал. Так что я попытался сделать все, что было в выражении try, и использовать его в качестве кода для метода, однако моя проблема возникла в первой строке, где очевидно, что «Files» является переменной, или, по крайней мере, я думаю, что именно в этом проблема.
Есть ли способ, которым я все еще могу использовать этот код как есть, создать переменную в C # и затем передать ее этому методу?
Я попытался сделать это, используя следующий код в моем приложении C #
private void button2_Click(object sender, RoutedEventArgs e)
{
DllTest.Funtions Functions = new DllTest.Funtions();
foreach (String Files in listBox1.Items)
{
String File = Files;
File = Functions.HashFunction();
listBox2.Items.Add(File);
}
}
Однако, когда я запускаю приложение, я получаю только те сообщения перехвата, которые появляются в списке. это ошибка в компиляторе, когда я использую метод "Первое случайное исключение типа 'System.ArgumentNullException' произошло в mscorlib.dll"
В любом случае, я могу сделать это без переписывания метода в C #?
Извините, если мой код не самый лучший, я все еще новичок в C ++ и C #