Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Платформы Windows Mobile и Windows Embedded > Импорт функции


Автор: vvs777 16.1.2009, 23:18
FPC, ARM, COREDLL.DLL.

Выкурил это
http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesvbcs/thread/d5544b95-5fc2-46e8-8007-de8bfe3ada7a/
Написал это
Код
program hello;
{$apptype console}
const
  SND_SYNC            = $0000;  { play synchronously (default) }
  SND_ASYNC           = $0001;  { play asynchronously }
  SND_NODEFAULT       = $0002;  { don't use default sound }
  SND_MEMORY          = $0004;  { lpszSoundName points to a memory file }
  SND_LOOP            = $0008;  { loop the sound until next sndPlaySound }
  SND_NOSTOP          = $0010;  { don't stop any currently playing sound }
  SND_NOWAIT          = $00002000;  { don't wait if the driver is busy }
  SND_ALIAS           = $00010000;  { name is a registry alias }
  SND_ALIAS_ID        = $00110000;  { alias is a predefined ID }
  SND_FILENAME        = $00020000;  { name is file name }
  SND_RESOURCE        = $00040004;  { name is resource name or atom }
  SND_PURGE           = $0040;      { purge non-static events for task }
  SND_APPLICATION     = $0080;      { look for application specific association }

function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOLean; stdcall; external 'CoreDll.DLL' name 'PlaySound';

var
    f:text;
    s:string;
begin
    assign(f,'tex1.txt');
    rewrite(f);
    writeln(f,'Hello world');
    s:='tst1.wav';
    playsound(@s[1],0, SND_FILENAME);
    //playsound('tst1.wav',0, SND_FILENAME);
    writeln(f,'played');
    close(f);
end.


Получаю это:
Цитата
plwav.exe is not a valid PocketPC application
.
Проблема не в компиляторе, т.к. если закомментировать playsound(... то все запускается и файл пишется.
Вывод: на сайте майкрософта недостоверная инфа и нет такой функции в coredll. Где найти нормальніе описания dll из WM5? Слить их с девайса невозможно, винда их протектит как-то что даже с самого устройства их нельзя скопировать в другую папку...

Автор: t_rex 18.1.2009, 14:41
1. Попробоуй вытянуть coredll на комп к себе и посмотреть Dependency Walker'ом, есть ли она там
2. Имя в DLL может быть задекорировано

Автор: vvs777 20.1.2009, 22:09
не вытягивается, залочена.

Кроме того, скачал библиотеку FMOD CE. Вычистил пример, оставил только нужное. На делфи под виндой все работает.
На ФриПасе откомпилил - ошибок не выводит но ничего не играет... и не вылетает...

Придумал еще один изврат. 
CreateOleObject('WMPlayer.OCX');
итп. Опять же на компе работает, при компиляции во фрипас модуль не найден... нет модуля с CreateOleObject()... последняя сборка фрипаскаля...

Автор: Alexeis 20.1.2009, 22:20
Код

BOOL WINAPI PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound);

  По идее в CE все функции с W на конце. 

Автор: vvs777 20.1.2009, 22:29
скорее всего..
Теперь не вылетает.
добавил параметр SND_SYNC
делает дзынь и все. х3 что творится... и на mp3 тот же дзынь хотя по идее ошибка должна быть...

Автор: Alexeis 20.1.2009, 22:36
Значит смотрим секцию экспорта от WM5 Coredll.dll
имеются функции.
 0001E57C  378 03D5 PlaySoundW и 
 0001E4EC  377 06EE sndPlaySoundW

Добавлено через 2 минуты и 24 секунды
Имя файла передается анси строкой?
Должна быть PWideChar

Добавлено через 5 минут и 34 секунды
  В делфях есть функция 
function StringToWideChar(const Source: string; Dest: PWideChar;
  DestSize: Integer): PWideChar;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)