Тема: Стек построенный на Memory Mapped File
По подобию Стека фиксированного размера, построенного на массиве организую стек на Memory Mapped File в DLL под QLua.
При размещении строчек кода в вызываемой функции из "main" функции- данные передаются
// вызываемая функция
static int BBA(lua_State* L){
...
// код записи побайтовой числа типа double
double h = lua_tonumber(L, -1);
lua_pop(L, 1);
/*для общей картины
union easy{
double *d;
size_t *s_t;
BYTE *pb;
} q_type;
*/
q_type.d = &h;
if (hFileMap_HC) {
PBYTE pb = (PBYTE)(MapViewOfFile(hFileMap_HC, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 1024));
if (pb != NULL){
if (!pb[0]!= 0){
memcpy(pb,q_type.pb ,sizeof(double));
}
}
UnmapViewOfFile(pb);
}
...
}
// основная функция
static int forLua_main(lua_State* L){
...
BBA(L);
...
}
При попытки создать отдельную функцию инициализации стека данные не записываются - ничего не могу понять.
struct stack{
double elem[STACK_MAX];
size_t top;
};
//функция инициализации
static int init ( lua_State* L, struct stack *stk){
stk->top = 0;
stk->elem[stk->top] = 10;
// lua_pushnumber(L, stk->elem[stk->top]);
// при выводе сообщения Lua ругается пока не закрою окно сообщения
// MessageBoxA(0,lua_tostring(L,-1), "double", MB_OK);
if (hFileMap_HC) {
PBYTE pb = (PBYTE)(MapViewOfFile(hFileMap_HC, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 1024));
if (pb != NULL) {
q_type.d = &(stk->elem[stk->top]);
memcpy(pb, q_type.pb, sizeof(double));
q_type.s_t = &(stk->top);
memcpy(pb + sizeof(double), q_type.pb, sizeof(size_t));
}
UnmapViewOfFile(pb);
}
return 0;
}
//инициализация в main
static int forLua_main(lua_State* L){
...
stack S;
init(L, &S);
...
}
Кто-нибудь???