Where im failing on native dll?

В продолжение важной темы, так получилось по итогу с uc текст передать в dll? 🤔
С int и byte все 👍
 

i guess its possible but i really dont make any idea about what i need to do
 
Буду пробовать изучать спасибо! я просто мало сталкивался с c++

Я проверил ваш код работает но после выполняя зависает Stack.Code++; использую

Test


Заработало использовал 2 раза Stack.Code++; до и после выполнения код


Мне кажется я нашел причину и ошибка исчезла теперь Stack.Code++ использую один раз.
Я правильно сделал?
C++:
  Code += sizeof(INT)+1;

Я нашёл, что первый вызов "Stack.Code++" - это байт, представляющий некий тип.

Вот как я это обнаружил:
C++:
    const INT B = Stack.ReadByte();

    INT value;
    if (B == 29)
        value = Stack.ReadInt();
    else if (B == 44)
        value = Stack.ReadByte();

C++:
inline BYTE ReadByte()
    {
        return *Code++;
    }
    inline void SkipBytes(const INT Count)
    {
        Code += Count;
    }
    inline void SkipByte()
    {
        ++Code;
    }

    inline INT ReadInt()
    {
        INT Result;
        Result = *(INT*)Code;
        Code += sizeof(INT);
        return Result;
    }

В интерфейсе:
C++:
native(4005) final function execDebugReadInt(int value);
Когда я вызывал функцию через "execDebugReadInt(10);" (читая интегер) я получал ошибки. Потом подумал... и попробовал "execDebugReadInt(1000000);". В результате - ошибок нет. Так я понял, что тип меняется в зависимости от числа. 10 => байт, 1000000 => интегер. Потом я посмотрел на тот же самый "Stack.Code++" перед "Stack.ReadInt()". Он оказался поинтером к типу - 29 если интегер, 44 если байт.

Потом я нашёл этот старый енум, который соответствует моему откритию (EX_IntConst = 29, EX_IntConstByte = 44):
C++:
//
// Evaluatable expression item types.
//
enum EExprToken
{
    // Variable references.
    EX_LocalVariable        = 0x00,    // A local variable.
    EX_InstanceVariable        = 0x01,    // An object variable.
    EX_DefaultVariable        = 0x02,    // Default variable for a concrete object.

    // Tokens.
    EX_Return                = 0x04,    // Return from function.
    EX_Switch                = 0x05,    // Switch.
    EX_Jump                    = 0x06,    // Goto a local address in code.
    EX_JumpIfNot            = 0x07,    // Goto if not expression.
    EX_Stop                    = 0x08,    // Stop executing state code.
    EX_Assert                = 0x09,    // Assertion.
    EX_Case                    = 0x0A,    // Case.
    EX_Nothing                = 0x0B,    // No operation.
    EX_LabelTable            = 0x0C,    // Table of labels.
    EX_GotoLabel            = 0x0D,    // Goto a label.
    EX_EatString            = 0x0E, // Ignore a dynamic string.
    EX_Let                    = 0x0F,    // Assign an arbitrary size value to a variable.
    EX_DynArrayElement      = 0x10, // Dynamic array element.!!
    EX_New                  = 0x11, // New object allocation.
    EX_ClassContext         = 0x12, // Class default metaobject context.
    EX_MetaCast             = 0x13, // Metaclass cast.
    EX_LetBool                = 0x14, // Let boolean variable.
    EX_MapKeyElement        = 0x15,    // Map key element.!!
    //
    EX_EndFunctionParms        = 0x16,    // End of function call parameters.
    EX_Self                    = 0x17,    // Self object.
    EX_Skip                    = 0x18,    // Skippable expression.
    EX_Context                = 0x19,    // Call a function through an object context.
    EX_ArrayElement            = 0x1A,    // Array element.
    EX_VirtualFunction        = 0x1B,    // A function call with parameters.
    EX_FinalFunction        = 0x1C,    // A prebound function call with parameters.
    EX_IntConst                = 0x1D,    // Int constant.
    EX_FloatConst            = 0x1E,    // Floating point constant.
    EX_StringConst            = 0x1F,    // String constant.
    EX_ObjectConst            = 0x20,    // An object constant.
    EX_NameConst            = 0x21,    // A name constant.
    EX_RotationConst        = 0x22,    // A rotation constant.
    EX_VectorConst            = 0x23,    // A vector constant.
    EX_ByteConst            = 0x24,    // A byte constant.
    EX_IntZero                = 0x25,    // Zero.
    EX_IntOne                = 0x26,    // One.
    EX_True                    = 0x27,    // Bool True.
    EX_False                = 0x28,    // Bool False.
    EX_NativeParm           = 0x29, // Native function parameter offset.
    EX_NoObject                = 0x2A,    // NoObject.
    EX_IntConstByte            = 0x2C,    // Int constant that requires 1 byte.
    EX_BoolVariable            = 0x2D,    // A bool variable which requires a bitmask.
    EX_DynamicCast            = 0x2E,    // Safe dynamic class casting.
    EX_Iterator             = 0x2F, // Begin an iterator operation.
    EX_IteratorPop          = 0x30, // Pop an iterator level.
    EX_IteratorNext         = 0x31, // Go to next iteration.
    EX_StructCmpEq          = 0x32,    // Struct binary compare-for-equal.
    EX_StructCmpNe          = 0x33,    // Struct binary compare-for-unequal.
    EX_UnicodeStringConst   = 0x34, // Unicode string constant.
    EX_EatCtrExpr           = 0x35, // Ignore a constructor expression.
    //
    EX_StructMember         = 0x36, // Struct member.
    EX_StructConstruct      = 0x37, // Struct constructor.
    //
    EX_GlobalFunction        = 0x38, // Call non-state version of a function.

    // Native conversions.
    EX_MinConversion        = 0x39,    // Minimum conversion token.
    EX_RotatorToVector        = 0x39,
    EX_ByteToInt            = 0x3A,
    EX_ByteToBool            = 0x3B,
    EX_ByteToFloat            = 0x3C,
    EX_IntToByte            = 0x3D,
    EX_IntToBool            = 0x3E,
    EX_IntToFloat            = 0x3F,
    EX_BoolToByte            = 0x40,
    EX_BoolToInt            = 0x41,
    EX_BoolToFloat            = 0x42,
    EX_FloatToByte            = 0x43,
    EX_FloatToInt            = 0x44,
    EX_FloatToBool            = 0x45,
    //
    EX_ObjectToBool            = 0x47,
    EX_NameToBool            = 0x48,
    EX_StringToByte            = 0x49,
    EX_StringToInt            = 0x4A,
    EX_StringToBool            = 0x4B,
    EX_StringToFloat        = 0x4C,
    EX_StringToVector        = 0x4D,
    EX_StringToRotator        = 0x4E,
    EX_VectorToBool            = 0x4F,
    EX_VectorToRotator        = 0x50,
    EX_RotatorToBool        = 0x51,
    EX_ByteToString            = 0x52,
    EX_IntToString            = 0x53,
    EX_BoolToString            = 0x54,
    EX_FloatToString        = 0x55,
    EX_ObjectToString        = 0x56,
    EX_NameToString            = 0x57,
    EX_VectorToString        = 0x58,
    EX_RotatorToString        = 0x59,
    EX_MaxConversion        = 0x60,    // Maximum conversion token.

    // Natives.
    EX_ExtendedNative        = 0x60,
    EX_FirstNative            = 0x70,
    EX_MallocConstRef        = 0xD1,
    EX_RefIsValid            = 0x0191,
    EX_ArrayOperation        = 0x01F3,
    EX_ArrayIterator        = 0x0203,
    EX_MapIterator            = 0x0204,
    EX_MapHasValue            = 0x0201,
    EX_MapRemoveValue        = 0x0217,
    EX_MapEmptyValue        = 0x021A,
    EX_AnyOperator            = 0x021D,
    EX_TeriaryCondition        = 0x021E, // Evaluate variable.
    EX_DeleteObject            = 0x0288,
    EX_Max                    = 0x1000,
};
 
Последнее редактирование:
Назад
Сверху Снизу