powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + jacob. Работа с кириллицей
14 сообщений из 14, страница 1 из 1
Java + jacob. Работа с кириллицей
    #39015971
AlexSSS4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть кто работал с библиотекой 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
Java + jacob. Работа с кириллицей
    #39015972
AlexSSS4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибку выдает тут Dispatch dServ2 = new Dispatch(objUser);
...
Рейтинг: 0 / 0
Java + jacob. Работа с кириллицей
    #39016182
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходные коды же есть, в чем проблема?

Строка получается и передается в 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
Java + jacob. Работа с кириллицей
    #39018958
AlexSSS4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
 String objUser = "WinNT://IUMAG/Администратор,user";
                        String objUser2 = new String(objUser.getBytes("utf-8"),"cp1251");


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

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

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

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


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