Возврат TMemo в DLL

Я сталкиваюсь с небольшой проблемой, когда пытаюсь вернуть объект (я также сталкиваюсь с проблемой при возврате класса, но это не фокус вопроса, я просто объясняю, потому что вы можете увидеть закомментированные ошибки в коде).

Цель кода - вернуть TMemo для выравнивания с существующим объектом, что-то вроде этого:

Memo1 = CriptLibDll::CriptLib::Encriptar(anyString, anyString, Memo1)

Вот файлы:

CriptLib.h:

#ifndef CriptLibDllH
#define CriptLibDllH

#ifdef CRIPTNSDLL_EXPORTS
#define CRIPTLIBDLL_API __declspec(dllexport)
#else
#define CRIPTLIBDLL_API __declspec(dllimport)
#endif

#ifdef __cplusplus

#include <fmx.h>
#include <System.Classes.hpp>
#include <string.h>
#include <FMX.Memo.hpp>

extern "C" {
#endif

    CRIPTLIBDLL_API TMemo* Cript_BasicoM(String Original, String Chave, TMemo* Memo);
//  CRIPTLIBDLL_API TStringList Cript_BasicoL(String Original, String Chave, TSringList Lista);
    CRIPTLIBDLL_API String Cript_BasicoS(String Original, String Chave, String Linha);

#ifdef __cplusplus
}

namespace CriptLib
{
    class Encriptar
    {
    public:
        TMemo* Subst(String Original, String Chave, TMemo* Memo) { return Cript_BasicoM(Original, Chave, Memo); }
//      static TStringList Subst(String Original, String Chave, TSringList Lista) { return Cript_BasicoL(Original, Chave, Lista); }
        String Subst(String Original, String Chave, String Linha) { return Cript_BasicoS(Original, Chave, Linha); }
    };
}
#endif

#endif

CriptLib.cpp:

#define CRIPTNSDLL_EXPORTS

#include "CriptLib.h"

#include <fmx.h>
#include <FMX.Memo.hpp>
#include <System.Classes.hpp>
#include <string.h>

//---------------------------------------------------------------------------

TMemo* Cript_BasicoM(String Original, String Chave, TMemo* Memo){

    TMemo* Encriptado = Memo;

    if (Original.Length() != Chave.Length()) {
        throw Exception (L"O tamanho das palaras chave e original não podem ser diferentes");
    }

    String Linha = NULL;

    for (int i = 0; i < Original.Length(); i++) {
        for (int k = 0; k < Encriptado->Lines->Count; k++) {
            Linha = Encriptado->Lines->Strings[k];
            for (int l = 0; l < Linha.Length(); l++) {
                if (Linha[l] == Original[i]) Linha[l] = Chave [i];
            }
            Encriptado->Lines->Strings[k] = Linha;
        }
    }

    Encriptado->Lines->Add(Original);
    Encriptado->Lines->Add("CriptB");

    return Encriptado;
}

//---------------------------------------------------------------------------

/*TStringList Cript_BasicoL (String Original, String Chave, TStringList Lista){

    TStringList* Encriptado = new TStringList;
    Encriptado->Strings = Lista->Strings;

    if (Original.Length() != Chave.Length()) {
        throw Exception (L"O tamanho das palaras chave e original não podem ser diferentes");
    }

    String Linha = NULL;

    for (int i = 0; i < Original.Length(); i++) {
        for (int k = 0; k < Encriptado->Count; k++) {
            Linha = Encriptado->Strings[k];
            for (int l = 0; l < Linha.Length(); l++) {
                if (Linha[l] == Original[i]) Linha[l] = Chave [i];
            }
            Encriptado->Strings[k] = Linha;
        }
    }

    Encriptado->Add(Original);
    Encriptado->Add("CriptB");

    return Encriptado;
} */

//---------------------------------------------------------------------------

String Cript_BasicoS (String Original, String Chave, String Linha){

    String Encriptado = Linha;

    if (Original.Length() != Chave.Length()) {
        throw Exception (L"O tamanho das palaras chave e original não podem ser diferentes");
    }

    for (int i = 0; i < Original.Length(); i++) {
        for (int l = 0; l < Encriptado.Length(); l++) {
            if (Encriptado[l] == Original[i]) Encriptado[l] = Chave [i];
        }
    }

    return Encriptado;
}
//---------------------------------------------------------------------------

Ошибки, которые я получил до сих пор:

[ilink32 Ошибка] Ошибка: Неразрешенный внешний '__fastcall System::Internal::Strhlpr::UnicodeFree(System::UnicodeString&)', указанный в C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::Syncobjs::TInterlocked::Increment(int&)' ссылка на C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенный внешний '__fastcall System::Internal::Strhlpr::UnicodeAssign(System::UnicodeString&, System::UnicodeString&)', на который ссылается C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::Internal::Strhlpr::UnicodeSetLength(System::UnicodeString&, int)', указанная в C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя 'System::Sysutils::Exception::', на которую ссылается C: \ USERS \ USER \ DOCUMENTS \ DESENVOLVIMENTO BASE \ TT2 \ WIN32 \ DEBUG \ CRIPTLIB.OBJ

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::Sysutils::Exception::Exception(System::UnicodeString)', на которую ссылается C: \ USERS \ USER \ DOCUMENTS \ DESENVOLVIMENTO BASE \ TT2 \ WIN32 \ DEBUG \ CRIPTLIB.OBJ

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::Sysutils::Exception::~Exception()' ссылается на C: \ USERS \ USER \ DOCUMENTS \ DESENVOLVIMENTO BASE \ TT2 \ WIN32 \ DEBUG \ CRIPTLIB.OBJ

[ilink32 Error] Ошибка: Неразрешенная внешняя '__fastcall System::TObject::~TObject()', на которую ссылается C: \ USERS \ USER \ DOCUMENTS \ DESENVOLVIMENTO BASE \ TT2 \ WIN32 \ DEBUG \ CRIPTLIB.OBJ

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя система::Sysconst::_SRangeError', на которую ссылается C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::LoadResString(System::TResStringRec *)', на которую ссылается C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | syssupp

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя 'System::Sysutils::ERangeError::', на которую ссылается C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::UniqueString(System::UnicodeString&)', на которую ссылается C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Ошибка] Ошибка: Неразрешенная внешняя '__fastcall System::Internal::Strhlpr::UnicodeFromPChar(System::UnicodeString&,char *, bool)', ссылка на которую есть в C: \ PROGRAM FILES (X86) \ EMBARCADERO \ STUDIO \ 15.0 \ LIB \ WIN32 \ DEBUG \ VCLE.LIB | ustring

[ilink32 Error] Ошибка: невозможно выполнить ссылку

Ссылки использовались, чтобы (попытаться) построить этот проект:

Как "вернуть объект" в C++?

C++ возвращает объект класса по ссылке

Заполнить TStringList в DLL (к сожалению, Delphi)

С тех пор, спасибо много

0 ответов

Другие вопросы по тегам