Как мне импортировать библиотеку DLL, созданную в Qt, в приложение C #

#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. Кодировка не имеет значения, так как здесь нет текстовых параметров