Используете Visual Studio DLL в Embarcadero RAD Studio XE?

Я собираюсь добавить функцию проверки орфографии в проект VCL Form C ++ в Embarcadero RAD Studio XE.

До сих пор мне удалось создать приложение, которое использует hunspell в Visual Studio 2012, выполнив следующие шаги: C ++ — Использование HunSpell 1.3.2 с Visual Studio 2010. Поэтому мой первый подход состоял в том, чтобы повторно использовать .dll, созданную с помощью компилятора VS в RAD Studio.

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"TForm1 *Form1;// dll path
const wchar_t* library = L"libhunspell.dll";

//  hunspell constructor
extern "C" __declspec(dllimport) hunspell_initialize(char const * aff,char const * dic);

//adds a word to the loaded dictionary
extern "C" __declspec(dllimport) int add(char const *) ;//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
HINSTANCE load;
try
{ load = LoadLibrary(library); }
catch(Exception &e)
{ ShowMessage(e.Message); }
if (load)
{
ShowMessage("Library Loaded!");

hunspell_initialize("de_DE.aff","de_DE.dic");
add("myword");
}
else {ShowMessage ("Library hasn't loaded!");}}

Я могу загрузить библиотеку, однако компоновщик не может разрешить внешние функции.

Мой второй подход заключался в импорте исходного кода hunspell и включении «hunspell.hxx». Однако я получаю ошибку синтаксиса объявления в файле «csuitl.hxx»

фрагмент кода:

// default flags
#define DEFAULTFLAGS   65510
#define FORBIDDENWORD  65510
#define ONLYUPCASEFLAG 65511

// fopen or optional _wfopen to fix long pathname problem of WIN32
LIBHUNSPELL_DLL_EXPORTED FILE * myfopen(const char * path, const char * mode); // << error line

// convert UTF-16 characters to UTF-8
LIBHUNSPELL_DLL_EXPORTED char * u16_u8(char * dest, int size, const w_char * src, int srclen);

// convert UTF-8 characters to UTF-16
LIBHUNSPELL_DLL_EXPORTED int u8_u16(w_char * dest, int size, const char * src);

Мне интересно, если я упускаю простой способ включить hunspell в мой проект, так как это широко используемый инструмент. Любая помощь приветствуется 🙂

(Документация Hunspell: http://sourceforge.net/projects/hunspell/files/Hunspell/Documentation/)

1

Решение

Что ж, если кто-нибудь когда-нибудь попытается использовать hunspell в Embarcadero RAD Studio XE или вообще захочет узнать, как использовать DLL, созданную Visual Studio внутри Embarcadero RAD Studio XE, я наконец нашел решение.

Подсказка командной строки:

implib -a hunspell.lib hunspell.dll

создает файл LIB, который можно добавить в проект.
Чтобы найти прототипы функций, вы можете создать текстовый файл:

tdump -ee -m hunspell.dll > out.txt

Наконец, функции могут быть импортированы:

extern "C" __declspec(dllimport) [return type] [function name] ([function parameters]);

Вы можете найти более подробную информацию по адресу:
https://labstreaminglayer.googlecode.com/hg-history/b51f278e31b7b276f20943b6bf2e1c1b5b964028/Apps/Embarcadero%20XE/Loading%20VS2008%20dlls%20into%20Embarcadero.txt

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]