Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№121-07-2012 13:27:01

logik
Участник
 
Группа: Members
Зарегистрирован: 27-04-2010
Сообщений: 42
UA: Firefox 12.0

js-ctypes copy memory

Привет всем.

Есть необходимость с помощью js-ctypes скопировать кусок памяти. можно ли это как-то сделать?
в с++ это выглядит так memcpy(&rtzi, tziBuff, dwSize);
rtzi структура, tziBuff байтовый буфер.

Благодарю за помощь.

Отсутствует

 

№223-07-2012 06:35:50

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 15.0

Re: js-ctypes copy memory

logik
1. Нужно создать тип js-ctypes, соответвтстующий вашей структуре: https://developer.mozilla.org/en/Mozill … Structures. Как передать указатель на этот тип - см. там же ниже в разделе Pointers.
2. Нужно сформировать ctypes array, соответствующий вашему буферу. Примеры - опять же выше по ссылке в соотв. разделе.
Пример из личной практики - примерно вот так обстояла работа с LPTSTR:

Выделить код

Код:

extern "C" __declspec(dllexport) int GetErrorMessage(int errcode, LPTSTR buffer)
{
  int msgRes=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,errcode,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),buffer,1025, NULL );
  return msgRes;
}

и в js:

Выделить код

Код:

GetErrorMessage: function(errcode,onlyMessage)
{
  var method=this.apilib.declare("GetErrorMessage",ctypes.winapi_abi,ctypes.int32_t,ctypes.int32_t,ctypes.jschar);
  let arrayType = ctypes.ArrayType(ctypes.jschar);
  let msg = new arrayType(1024);
  var res=method(errcode,msg);
  if (res==0) throw new Error("apilib.GetErrorMessage: FormatMessageW returns NULL.")
  return msg.readString();
}

ctypes весьма неудобны, когда нужно выполнить достаточно сложный код (который при том тривиален в C/C++) - я бы посоветовал по возможности выносить максимум кода в свою сишную библиотеку-враппер с методами с максимально простой сигнатурой. И вызывать методы из этого враппера - так намного проще.

Отсутствует

 

№323-07-2012 22:52:07

logik
Участник
 
Группа: Members
Зарегистрирован: 27-04-2010
Сообщений: 42
UA: Firefox 12.0

Re: js-ctypes copy memory

ну мне нужно было конкретное решение именно по copymemory, я просто не знал какую функцию из dll нужно было цеплять. в целом c ctypes я знаком.
но я уже нашел решение - RtlMoveMemory

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]