Автор Тема: perl и C++  (Прочитано 2208 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bugs

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl и C++
« : 15 Апреля 2004, 18:07:15 »
Застрял вот на чем :

Сначала написал програмку на VC++  :  подключаю мою DLL-ку, описываю прототип функции которую собираюсь вызывать и собственно вызываю. Одним из параметров функции является указатель на выходной массив, в котором будут содержаться  идентификаторы  - тип LPDWORD или unsigned long*. Результат возвращается - все ок.

Нужно написать то же самое на Perl\'e :
Подключаю DLL, описываю нужную мне функцию :
ApiLink(\'mglue32.dll\', \'DWORD MG_GetCurSympIds(HANDLE hwnd, DWORD id, LPDWORD lpaid, DWORD dwMaxSize)\');
Вызываю ее в скрипте, на место LPDWORD lpaid подаю например скаляр $list или массив @list пока неважно.
Выделаю под него память $list = " " x 200.  Вместо идентификаторов возвращается последовательность символов в юникоде, причем на каждый идентификатор приходится по два символа.

Подскажите что нужно сделать чтобы получить нормальные идентификаторы в виде чисел?

Кстати, если это поможет :

 Если в проге на VC++  в прототипе вместо unsigned long* указать char* то вместо целых чисел возвращаеются как раз те самые символы в юникоде

Оффлайн bugs

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl и C++
« Ответ #1 : 15 Апреля 2004, 21:18:31 »
Разобрался сам
Оказывается нужно было использовать функцию unpack

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28