icu и конвертер из памяти

Я хочу создать конвертер из памяти.

Я создал etrypoint_dat, а затем файл c из моего конвертера и соединил две структуры вместе:

 },
    "", 1, 0, {
      { "ibm-5348_P100-1997", (const void *)&ibm_5348_P100_1997_cnv }
  }

Из кода я звоню

  udata_setAppData("icupackage.dat", &ntrypoint_dat, &status); // return is good

Теперь мой вопрос: как мне создать конвертер после вызова setAppData?

Не работает следующее:

 UConverter* conv = ucnv_open("ibm-5348_P100-1997", &status);

icu
person user750716    schedule 12.05.2011    source источник


Ответы (2)


Я нашел это сам.

Соединение между двумя структурами должно быть названо следующим образом:

{ "icupackage.dat/ibm-5348_P100-1997.cnv", (const void *)&ibm_5348_P100_1997_cnv },

то из кода мы можем вызвать:

  status = U_ZERO_ERROR;
  udata_setAppData("icupackage.dat", &ntrypoint_dat, &status);

а потом:

  status = U_ZERO_ERROR;    
  _cnvCP1252 = ucnv_openPackage("windows", "ibm-5348_P100-1997.cnv", &status);

.dat следует удалить. Я оставляю это для соответствия с вопросом.

person user750716    schedule 13.05.2011
comment
Я делаю опечатку. Пакет имеет имя icupackage.dat. _cnvCP1252 = ucnv_openPackage(icupackage.dat, ibm-5348_P100-1997.cnv, &status); @манфред - person user750716; 16.05.2011

Вместо этого я бы предложил вам использовать инструмент pkgdata со статическим режимом, который создаст статическую библиотеку для вас, чтобы связать ее. Этот другой пример - недокументированный и хрупкий хрупкий способ.

person Steven R. Loomis    schedule 17.05.2011
comment
Да, я обнаружил, что описанный выше способ работает не во всех случаях, и поэтому я переключился на pkgdata в статическом режиме. - person user750716; 19.05.2011
comment
Пожалуйста, сообщите об ошибке, если есть что-то непонятное в том, как использовать вещи, или если у вас есть какие-либо предложения. Спасибо за использование ICU. - person Steven R. Loomis; 19.05.2011