RENG.RU

RE/System Programming
Текущее время: 16 дек 2017, 03:01

Часовой пояс: UTC + 6 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 01 июл 2006, 19:53 
Не в сети

Зарегистрирован: 05 сен 2003, 19:48
Сообщения: 43
Првиетствую!

Кто-то сталкивался? Есть mfc42, например, и есть .def от неё. Нужно пробежаться по импорту и переименовать MFC42_6467 в ??0AFX_MAINTAIN_STATE2@@QAE@PAVAFX_MODULE_STATE@@@Z.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 июл 2006, 16:09 
Не в сети

Зарегистрирован: 31 июл 2002, 14:01
Сообщения: 684
IceStudent писал(а):
Првиетствую!

Кто-то сталкивался? Есть mfc42, например, и есть .def от неё. Нужно пробежаться по импорту и переименовать MFC42_6467 в ??0AFX_MAINTAIN_STATE2@@QAE@PAVAFX_MODULE_STATE@@@Z.


Я делал пару лет назад для MFC7.1
Код:
#include <idc.idc>

static renLibFn (ordName, name) {
  auto x;

  x = LocByName (ordName);
  if (x != BADADDR) {
//    Message ("MakeName 0x%08X:%s -> %s\n", x, ordName, name);
    MakeName (x, name);
  }
}

/**************************************************************************/
/**************************************************************************/
/**************************************************************************/

static ltrim (str) {
  auto c, i;

  for (i = 0; ; i++) {
    c = substr (str, i, i+1);
    if ((c != " ") && (c != "\t")) break;
  }

  return substr (str, i, -1);
}

/**************************************************************************/
/**************************************************************************/
/**************************************************************************/

static strs (str) {
  auto c, i;

  for (i = 0; i < strlen (str); i++) {
    c = substr (str, i, i+1);
    if ((c == " " || c == "\t" || c == "\n")) break;
  }

  return substr (str, 0, i);
}

/**************************************************************************/
/**************************************************************************/
/**************************************************************************/

static main() {
  auto libName;
  auto defFile;
  auto f;
  auto str, c, name;
  auto u1, i2, i3;
  auto state;

  defFile = AskFile (0, "*.def", "Specify .DEF file"); // ask a file name
  if (defFile == "") return;
  libName = AskStr ("MFC70", "Enter library name"); // ask a string
  if (libName == "") return;

  f = fopen (defFile, "rt");
  if (!f) {
    Message ("Can't open %s", defFile);
    return;
  }

  state = 0;
  while ((str = readstr(f)) != -1) {
    if (state == 0) {
      if (strstr (str, "EXPORTS") >= 0) state++;
    }
    else if (state == 1) {
      if (str == "") continue;
      c = substr (str, 0, 1);
      if (c == ";") continue;
      if (c == " " || c == "\t") {
        str = ltrim (str);
        name = strs (str);
        if (name == "") continue;
        str = ltrim (substr (str, strlen (name), -1));
        if ("@" != substr (str, 0, 1)) continue;
        str = libName + "_" + strs (ltrim (substr (str, 1, -1)));
        renLibFn (str, name);
      }
      else state++;
    }
    else if (state == 2) {
      break;
    }
  }

  fclose (f);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 03 июл 2006, 16:17 
Не в сети

Зарегистрирован: 05 сен 2003, 19:48
Сообщения: 43
Благодарю.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 6 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB