Здравствуйте, данный вопрос является продолжением начатой мною темы:
Которая перешла в несколько иное русло.
Как уже писал в данной теме, я не смог удалить ордер из за того, что не получилось передать в качестве параметра требуемый order_num.
Когда я протестировал два одинаковых скрипта (один на чистом lua, а другой на lua_CApi ) - то обнаружил интересную закономерность (либо я криворукий... поправте в случае нахождения ошибки)
первый скрипт - на qlua - возвращает верное значение lua_CApi. Второй (скрипт близнец) - на С++ с использованием lua_CApi - возвращает значение order_num: -2147483648
Ниже представляю оба тестовых скрипта:
большая просьба как к админам, так и просто к тем кто пишет ботов на С++ так же как и я поправить или же прокомментировать мои ошибки, или же как можно обойти встречную мною ситуацию:
Qlua:
lua_CApi + C++:
Которая перешла в несколько иное русло.
Как уже писал в данной теме, я не смог удалить ордер из за того, что не получилось передать в качестве параметра требуемый order_num.
Когда я протестировал два одинаковых скрипта (один на чистом lua, а другой на lua_CApi ) - то обнаружил интересную закономерность (либо я криворукий... поправте в случае нахождения ошибки)
первый скрипт - на qlua - возвращает верное значение lua_CApi. Второй (скрипт близнец) - на С++ с использованием lua_CApi - возвращает значение order_num: -2147483648
Ниже представляю оба тестовых скрипта:
большая просьба как к админам, так и просто к тем кто пишет ботов на С++ так же как и я поправить или же прокомментировать мои ошибки, или же как можно обойти встречную мною ситуацию:
Qlua:
| Код |
|---|
function main()
for i = getNumberOf("orders")-1,0,-1 do
T = getItem("orders",i);
if T.sec_code == "ROSN" and
bit.test(T.flags,0) then
message(tostring(T.order_num));
end;
end;
end;
|
lua_CApi + C++:
| Код |
|---|
#include <Windows.h>
#include <thread>
#define LUA_LIB
#define LUA_BUILD_AS_DLL
extern "C" {
#include "Lua\lauxlib.h"
#include "Lua\lua.h"
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
static struct luaL_reg ls_lib[] = {
{ NULL, NULL }
};
#include <bitset>
extern "C" LUALIB_API int luaopen_test_addition(lua_State *L)
{
auto _test = [](int bit_num, int bit_test)
{
std::bitset<16> bits(bit_num);
return bits[bit_test] == 1;
};
lua_settop(L, 0);
lua_getglobal(L, "getNumberOf");
lua_pushfstring(L, "orders");
lua_call(L, 1, 1);
int length = (int)lua_tonumber(L, -1);
lua_settop(L, 0);
for (size_t i = 0; i < length; i++)
{
lua_getglobal(L, "getItem");
lua_pushfstring(L, "orders");
lua_pushnumber(L, i);
lua_call(L,2,1);
lua_getfield(L, -1, "sec_code");
std::string sc = lua_tostring(L, -1);
lua_remove(L, -1);
lua_getfield(L, -1, "flags");
int f = lua_tonumber(L, -1);
lua_remove(L, -1);
if (sc.compare("ROSN") == 0 && _test(f, 0))
{
lua_getfield(L, -1, "order_num");
int N = lua_tonumber(L, -1);
lua_remove(L, -1);
msg_ToQuik(L, std::to_string(N), 1);
}
lua_settop(L, 0);
}
return 0;
}
|