Galkov писал(а):
tsdima, признавайся
KOLEdb.StringToOleStr - твоя работа ?
Никогда не трогал KOLEdb.
Когда я дорабатывал VBJScript, я вносил какие-то изменения в KOLComObj. Судя по подчерку, я изменил OleStrToStrVar, т.к. системная функция WideCharToStrVar (которая там была использована, наверное) в FPC глючная. А вот рядышком есть StringToOleStr, я её переделывать не стал. Она, кстати, использует системную функуцию FPC StringToWideChar, которая, возможно, работает нормально.
------------ Дoбавленo:
tsdima писал(а):
которая, возможно, работает нормальноНифига, блин, не работает.
А если вот так, то работает:
#pas
function StringToLPOLESTR(const Source: string): POleStr;
var
SourceLen: Integer; Buffer: array of WideChar;
begin
SourceLen := Length(Source);
SetLength(Buffer, SourceLen+1);
//StringToWideChar(Source, Buffer, SourceLen); Buffer[SourceLen] := #0;
MultiByteToWideChar(0,0,@Source[1],SourceLen,Buffer,(SourceLen+1)*2);
Result := SysAllocString(Buffer);
end;
И ещё бага, вот исправленный вариант:
#pas
procedure THIVBJScript.SetScript;
var
Result: OleVariant;
ExcepInfo: TEXCEPINFO;
begin
CreateScriptEngine(TScriptLanguage(_prop_Language));
Me := TMe.Create(Self);
AddNamedItem('sys', SCRIPTITEM_ISVISIBLE, Me);
FParser.ParseScriptText(StringToOleStr(Value), nil, nil, nil, 0, 0, 0, Result, ExcepInfo);
end;