Компиляция FreeType в DLL (в отличие от статической библиотеки)

Я хочу использовать FreeType в проекте С#. Я нашел это привязка, но мне все еще нужен freetype.dll. Обычно я использую статическую библиотеку в моих проектах на С++, поэтому я никогда ее не компилировал. Открыв freetype-решение (VS2010), я заметил, что нет никакой конфигурации для динамической библиотеки - просто статичной. Я попытался создать свою собственную конфигурацию и получил ее для создания freetype.dll. Если я использую его с С# -связыванием, я получаю исключение, что точка входа FT_Init_FreeType не найдена. Любая идея, как я должен настроить проект freetype для экспорта этих функций?

Ответы

Ответ 1

Если вы в порядке со старой версией (март 2008), вы можете перейти на страницу FreeType для Windows, загрузить последние бинарные файлы пакет, откройте .ZIP и извлеките FreeType6.dll из каталога bin. Просто переименуйте его соответствующим образом.

Если вам нужна более новая версия, вот как вы можете скомпилировать последнее:

  • скачать последний источник (2.4.6 на сегодня) из http://sourceforge.net/projects/freetype/files/freetype2/

  • откройте Visual Studio 2010 и загрузите freetype.sln из каталога builds\win32\vc2010.

  • откройте конфигурацию проекта и на вкладке General измените Configuration Type на Dynamic Library (.dll)

  • откройте файл ftoption.h и добавьте эти строки (например, рядом с разделом примечаний "Экспорт компиляции DLL" ):

    #define FT_EXPORT(x)  __declspec(dllexport) x
    #define FT_BASE(x)    __declspec(dllexport) x
    
  • измените конфигурацию компиляции проекта на "Release".

  • скомпилируйте проект. Теперь вы должны иметь freetype246.dll в каталоге objs\win32\vc2010.

Ответ 2

Я готов поспорить, что проблема в том, что ваш проект DLL не экспортирует никаких символов, поэтому, хотя весь код находится там, адреса символов не находятся в таблице экспорта, поэтому никто не может получить от них снаружи.

Этот вопрос имеет хорошее решение для экспорта всех символов в .dll без необходимости их вручную перечислять.