Я разрабатываю приложение, которое обменивается данными с некоторыми аппаратными средствами, используя C++ DLL, предоставляемую поставщиком оборудования. У меня также есть файл заголовка для этой DLL, но нет исходного файла. В моем приложении C#, я пытаюсь импортировать и вызывать функции DLL, как это:Импорт и использование C++ DLL-функций в приложении C#
public class MyClass
{
[DllImport("CaGe.dll")]
public static extern long someLibraryFunction();
public void callLibFunction()
{
Console.WriteLine("function call: " + someLibraryFunction());
}
}
Library.dll файл находится в той же папке, что и файл MyClass.cs, а также остальной части проекта файлы. Однако, когда я запускаю сеанс отладки, я сначала получаю диалоговое окно из системы, в котором говорится: CAGE InitDll: Erro в библиотеке загрузки «CdbClientInit», и после того, как я нажму ОК, это нечеткое исключение в строке, где я вызываю библиотечную функцию occours.
Исключение говорит: System.DllNotFoundException: Исключение из HRESULT: 0x8007045A
я нашел в Интернете, что это может быть вызвано отсутствующим DLL, сколько нужно CaGe.dll, так что я пытался поставить DLL через Уолкер зависимости, но результаты немного запутывают меня. В CAGE.DLL есть вкладки WS32_32.DLL, VERSION.DLL, KERNEL.DLL и USER32.DLL. Я полагаю, что библиотеки, которые мне нужны, находятся где-то под вкладкой USER32.DLL, но я не признаю ни одного из них (если недостающая DLL является причиной этой проблемы).
Любые советы будут очень appretiated :)
Проблема может быть более вероятно, что ваша программа не может найти ' CaGe.dll'. Вы сказали, что он находится в том же каталоге, что и исходные файлы, но это не то место, где ваш исполняемый файл создается (по умолчанию.) Попробуйте поместить DLL в Bin \ Debug или Bin \ Release, где находится исполняемый файл вашей программы. –
Да, это решило, спасибо :) –