如何解决在C ++ Dll中创建要导入C#的方法
|| 在学习了一些小型课程并使用WPF和C#之后,我决定重写我一直在研究的应用程序。我的大多数功能都可以在我创建并导入到WPF应用程序的C ++ DLL中正常运行。 我对其中的一些麻烦。我以前曾从其他函数传递变量或使用过对话框和消息框。 这是我需要放入DLL的C ++函数之一的示例。该函数生成使用OpenFileDialog添加到列表框中的文件列表的MD5哈希码。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);
}
}
但是,当我运行该应用程序时,我只会在列表框中显示捕获消息。当我使用方法“在mscorlib.dll \中发生类型为'System.ArgumentNullException \'的第一次机会异常”时,这是编译器中的错误。
无论如何,我无需重写C#中的方法就可以做到这一点?
抱歉,如果我的代码不是最好的代码,那么我对C ++和C#还是很陌生
解决方法
咨询我的心理调试器后,我确定您想要在C ++ / CLI中这样做:
String^ HashFunction(String^ filename)
{
array<Byte>^ Buffer = IO::File::ReadAllBytes(filename);
array<Byte>^ Hash = MD5CryptoServiceProvider().ComputeHash(Buffer);
return BitConverter::ToString(Hash);
}
而这在C#中:
private void button2_Click(object sender,RoutedEventArgs e)
{
foreach (String filename in listBox1.Items)
{
try {
listBox2.Items.Add(Functions.HashFunction(filename));
}
catch (Exception ex) {
MessageBox.Show(e.Message);
}
}
}
但是我的心理调试器经常出现故障。
, String File = Files;
File = Functions.HashFunction();
上面的代码毫无意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。