![]() |
#10 |
Участник
|
Хм.
Стал разбираться в функции BC_Code128 и вот какая картина открывается. Внутри BC_Code128, для проверки правильности данных в передаваемой строке вызывается системная функция SysStringByteLen(), в которую в качестве параметра передается тип BSTR. Внутри этой функции и проверяется смещение на четые байта от начала строки - берется ее размер. Если там не ноль, то BC_Code128 считает, что строка валидная и обрабатывает ее. А здесь начинаются чудеса. Обрабатывается уже не тип BSTR, а обыкновенная ANSI-строка. Т.е., получается, нужен некий аналог паскалевской строки. Теперь о том, как ее получить. Начиная с KR2 можно передавать строку как тип ExtTypes::BStrAnsi - как раз передается паскалевская строка в вызываемую функцию (опять же, ожидал увидеть юникод, по-этому в предыдущем сообщении сделал неверный вывод). Если не установлен KR2 или выше, то можно использовать такой код X++: str encode(str _string) { DLLFunction _BC_Code128; DLL _barcodeDLL; str barcodeStr; Binary pStr = new Binary(strlen(_string) + 4 + 1); Binary ptr = new Binary(4); ; try { _barcodeDLL = new DLL('Bcfont32'); } catch(Exception::Internal) { info("barcodeDLL error!!!"); return ''; } _BC_Code128 = new DLLFunction(_barcodeDLL,'BC_Code128'); _BC_Code128.returns(ExtTypes::String); _BC_Code128.arg(ExtTypes::DWord); pStr.DWord(0, strlen(_string)); pStr.String(4, _string); ptr.Binary(0, pStr); barcodeStr = _BC_Code128.call(ptr.DWord(0)+4); _barcodeDLL = null; _BC_Code128 = null; return barcodeStr; } ![]() Прошу прощения у почтенной публики ![]() PS. Если кому интересно ![]() В KR2 для преобразования строки в тип ExtTypes::BStrAnsi вызывается функция SysAllocStringByteLen() из oleaut32.dll. В принципе, можно использовать ее для явного преобразования из кода x++. Только не забывать, что необходимо освобождать полученную память с помощью вызова SysFreeString(). Ну и кода получится значительно больше, чем при использовании моего подхода ![]()
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 25.09.2007 в 12:02. |
|
|
За это сообщение автора поблагодарили: Logger (2). |
Теги |
bstr, lpstr, баг, штрихкод |
|
|