Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + jacob. Работа с кириллицей / 14 сообщений из 14, страница 1 из 1
25.07.2015, 15:02
    #39015971
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Есть кто работал с библиотекой jacob?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
                        String userName = Dispatch.get(dItem2, "Name").getString();
                        String objUser = "WinNT://IUMAG/" + userName + ",user";
                        Dispatch dServ2 = new Dispatch(objUser);
                        Dispatch objSet3 = Dispatch.call(dServ2, "SetPassword", "test").getDispatch();
                        break;
                    }
                }
            }
        }


Если userName на кириллице, то программа выдает: Exception in thread "main" com.jacob.com.ComFailException: Can't find moniker, а если на английском, то все работает нормально. Кто может знает, как это обойти?
...
Рейтинг: 0 / 0
25.07.2015, 15:02
    #39015972
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Ошибку выдает тут Dispatch dServ2 = new Dispatch(objUser);
...
Рейтинг: 0 / 0
26.07.2015, 17:37
    #39016182
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Исходные коды же есть, в чем проблема?

Строка получается и передается в JACOB примерно в следующим виде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 const char *progid = env->GetStringUTFChars(_progid, NULL);
...
  LPOLESTR bsProgId = A2W(progid);
  if (strchr(progid,':')) 
  {
     env->ReleaseStringUTFChars(_progid, progid);
     // it's a moniker
     hr = CoGetObject(bsProgId, NULL, IID_IUnknown, (LPVOID *)&punk);
...


Макрос A2W преобразует данные из ANSI кодировки Windows в Wide char. Отсюда вывод, входные строка должна содержать данные в ANSI кодировки Windows (скорее всего 1251), а НЕ в UTF8 (как принято в Java).

Авторы JACOB конечно немного уроды, что НЕ сделали преобразование из UTF8 (принятой в Java) в Wide char. Но, думаю, национальные имена в COM не так часто встречаются.

Т.ч. я бы попробывал просто руками в Java преобразовать строку из UTF в 1251. Понятное дело, что работать будет только на Windows, где в качестве ANSI кодировки стоит 1251, т.е. Default characterset = Russian.
...
Рейтинг: 0 / 0
29.07.2015, 17:49
    #39018958
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Код: java
1.
2.
 String objUser = "WinNT://IUMAG/Администратор,user";
                        String objUser2 = new String(objUser.getBytes("utf-8"),"cp1251");


Вот написал, все равно ошибка
...
Рейтинг: 0 / 0
29.07.2015, 19:02
    #39019029
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Тогда подробнее, что

1: Вы пытаетесь сделать. С созданием объектов через моникеры вообще ни разу не сталкивался. Что такое
2: простейший, компилируемый test case.

У меня Windows 7, если это стандартная возможность, то постараюсь запустить. Если и когда будет время (((

В принципе JACOB 1 в 1 передает строку в Windows API. Т.ч. или проблема у Вас или у M$.
String objUser2 = new String(objUser.getBytes("utf-8"),"cp1251");

Мне кажется, должно быть наоборот:

new String( objUser.getBytes("cp1251") )

Проверять влом ))) Или гоните тест кейс с пояснениями, что за задачу Вы решаете. Может и мне такая возможность когда-нибудь пригодится )))
...
Рейтинг: 0 / 0
01.08.2015, 10:13
    #39020911
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Leonid Kudryavtsev, Функция GetStringUTFChars() формируют массив байтов по стандарту UTF, который соответствует ожидаемому только для ASCII-символов (первых 128 значений). Русские буквы опять в пролёте.
Так что придется искать другую библиотеку.
Я делаю пирограмму, которая меняю пароли локальным Администраторам в сети
...
Рейтинг: 0 / 0
02.08.2015, 15:10
    #39021180
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
И чем вам штатный утиль не угодил-то???
...
Рейтинг: 0 / 0
02.08.2015, 16:22
    #39021187
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Basil A. Sidorov,

Компов 350 штук, надо всем поменять.
...
Рейтинг: 0 / 0
03.08.2015, 16:23
    #39021892
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Не подскажите, если пересобрать dll jacob, то там автоматически можно скомпилировать под x64 и x86?
И подойдет Borland С++ Builder 6?
...
Рейтинг: 0 / 0
03.08.2015, 16:35
    #39021904
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
AlexSSS4Компов 350 штук, надо всем поменять.Давно это было, но переустанавливал SAV9 -> SAV10 в сетке из ~80 компов. Самым сложным было обойти глюкофичи симантека из-за которых и пришлось всё это организовывать.
А вашу задачу решает вполне тривиальное:
Код: plaintext
1.
2.
 net user /?
 schtasks /?
 for /?
...
Рейтинг: 0 / 0
03.08.2015, 17:12
    #39021940
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
AlexSSS4Не подскажите, если пересобрать dll jacob, то там автоматически можно скомпилировать под x64 и x86?

Из BuildingJacobFromSource.html:

Development Environment
The simplest build environment includes MS Visual Studio 10.0 (Studio 2010), Eclipse 3.3 with the C/C++ module and JDK 1.6. In that situation, you would just create the compilation_tools.properties using the example at the top of build.xml as a template.

Microsoft Visual Studio 2013 and it's included library. (to C:\ProgramFiles (X86) in my case)
Eclipse from www.eclipse.org as the Java IDE.
Eclipse C/C++ plugin can be used for C coding in place of VC++ IDE.
Java JDK 1.6 , latest available
Install the V7.1A libraries that originally came with VS2010

Release C Version Java Version ANT Version Eclipse Version Used generated DLLs
up to 1.6 VC 98 (6.0) ? MAKE ? 32 bit
1.7 VC 98 (6.0) 1.4 (48) 1.? ? 32 bit
1.8 VC 98 (6.0) 1.4 (48) 1.? ? 32 bit
1.9 VC 98 (6.0) 1.4 (48) 1.? ? 32 bit
1.10 VC 98 (6.0) 1.4 (48) 1.? 3.?? 32 bit
1.11 VC 98 (6.0) & 2003 64bit libs 1.4.? (48) 1.6.? 3.2.1 32 and 64 bit
1.12 VC 98 (6.0) & 2003 64bit libs 1.4.2 (48) 1.6.5 3.2.2 32 and 64 bit
1.13 VC 2005 (8) 1.4.2 (48) 1.7.0 3.3 32 and 64 bit
1.14 VC 2005 (8) 1.5.0 (49) 1.7.0 3.3 32 and 64 bit
1.15 VC 2005 (8) 1.5.0 (49) 1.7.0 3.4 32 and 64 bit
1.17 VC 2005 (8) 1.5.0 (49) 1.8.4 Eclipse Embedded 4.3 32 and 64 bit
1.18 VS 2013 (12) Windows SDK 7.1A 1.6.0 (50) 1.8.4 Eclipse Embedded 4.3 32 and 64 bit
Microsoft Visual Studio 13 supports 64 bit builds. so no additional tools are required.
Microsoft changed the location of the windows sdk (formerly known as platform sdk) after VC 8.0. https://en.wikipedia.org/wiki/Microsoft_Windows_SDK

AlexSSS4И подойдет Borland С++ Builder 6?
Там просто .C, .H файла и банальный Windows API. Т.ч. для первого приближения пойдет. Понятное дело, проект придется делать самому.

Но, разумеется, для продакшена желательно использовать "родные" средство. У Borland C по сравнению с MS VC полно мелких недостатков. Конечно спорно и холеварано, но мне в какой-то момент пришлось от BC к MS VC уходит.
...
Рейтинг: 0 / 0
07.08.2015, 14:47
    #39025082
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Ура. Все получилось!
Пришлось перекомпилировать dll и в Dispatch.cpp поменять
Код: plaintext
1.
LPWSTR bsProgId = A2W(progid);


на
Код: plaintext
1.
2.
  wchar_t* bsProgId = new wchar_t[4096];
    MultiByteToWideChar(CP_UTF8, 0, progid, -1, bsProgId, 4096);
...
Рейтинг: 0 / 0
07.08.2015, 18:57
    #39025312
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Оптимальный вариант дополнительно авторам написать.

Сколько лет библиотеки, на такую бяку никто внимание не обращал ((( К тому же явный ляп автора Jacob'а. В Java не ANSI, в Java UTF8. Т.ч. использование A2W совершенно не правомерно и не корректно.
...
Рейтинг: 0 / 0
07.08.2015, 19:46
    #39025335
AlexSSS4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java + jacob. Работа с кириллицей
Leonid Kudryavtsev,
Я добавил на sourceforge в Bugs
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + jacob. Работа с кириллицей / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]