#c# #qt #dllimport
#c# #qt #dllimport
Вопрос:
Я создал DLL в Qt с помощью одной функции, вызываемой test
. Я создал другой проект Qt, в котором я могу использовать DLL без проблем. Теперь я хочу использовать эту библиотеку DLL в приложении C #, однако у меня возникают проблемы с вызовом функции. Я поместил DLL в ту же папку, что и мой C # exe. Я импортирую функцию следующим образом
[DllImport("TestDll.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern bool test();
Я получаю следующее исключение:
EntryPointNotFoundException
Я попытался добавить EntryPoint = test
в свой DllImport, но все равно получаю то же исключение
Что я делаю не так?
Комментарии:
1. Вы уверены, что метод тестирования экспортирован из библиотеки DLL? Загрузите средство управления зависимостями и посмотрите, указано ли оно в экспорте. dependencywalker.com
2. Не нужно устанавливать char, поскольку текста нет, а SetLastError = true неверно, это для win API. Скорее всего, ваша библиотека DLL имеет искаженные имена. Экспортируйте ее с помощью файла .def, чтобы избежать искажений. Убедитесь, что вы используете extern «C». Также приведите соглашения о вызовах в соответствие. Код C будет использовать cdecl, в вашем C # по умолчанию используется stdcall.
3. у меня такое чувство, что это может иметь какое-то отношение к тому факту, что у меня не установлена статическая сборка qt.. пока не уверен, хотя
Ответ №1:
Вы пробовали изменить параметр в кодировке? Я был в аналогичной ситуации. Но в то время я использовал стороннюю библиотеку Dll, скомпилированную на Fortran. Скажем, может быть, попробуйте из Ansi в Unicode.
HTH
Комментарии:
1. Кодировка не имеет значения, так как здесь нет текстовых параметров