Я использовал коллектор Boehm в прошлом с хорошим успехом. Это - открытый исходный код и может использоваться в коммерческом программном обеспечении.
Это - консервативный коллектор и имеет долгую историю разработки одним из передовых исследователей в технологии сборки "мусора".
Типы-примитивы, в основном строки / числа / логические значения, передаются по значению в целях повышения эффективности. Такие объекты, как функции, объекты, массивы и т.п. передаются по ссылке. Вы можете создать объект и передать его, например {d: 1, s: 'directo'}, а затем изменить значения, потому что вы передаете ссылку.
Создайте глобальную переменную или объект. Или, если вас беспокоят другие функции, обращающиеся к переменным и изменяющие их, сделайте одноэлементный. Другой вариант - вернуть объект. Примерно так
function TOPOSFiscalPrinter.DirectIO(Command: Integer; var pData: Integer;
var pString: WideString): Integer;
function TOPOSFiscalPrinter.DirectIO(Command, pData, pString){
....
var pObj = {
d: 0,
s: '',
code: ''
}
pObj.d = pDataAltertedValue;
pObj.s = pStringAltertedValue;
pObj.code = code;
return pObj;
}
function test()
{
var d=1, s="DIRECIO:";
var r = opos.DirectIO(1024, d, s);
code = r.code;
d = r.d;
s = r.s;
alert(d); alert(s);
}
В JavaScript нет поддержки выходных параметров. Упакуйте то, что вы хотите вернуть в объект автоматизации, присвойте значения его свойствам и верните их, или, если ваше возвращаемое значение уже занято, создайте класс, который имеет свойства, которые вы можете назначить в своем ActiveX, и добавьте параметр, тип которого учебный класс. В вашем ActiveX вы можете использовать IDispatch / Ex для получения / установки свойств.