Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

.NET и WIN32 API

370
23 октября 2007 года
koval
443 / / 29.08.2005
У меня возникла следующаяя проблема:
необходимо импортировать ф-цию WIN32 в управляемый код.
К примеру пусть это будет ф-ция
 
Код:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);


С первыми двумя параметрами все понятно, но вот третий параметр(флаг) вызывает некоторое недоумение...

[quote="Выдержка из MSDN"]
fdwSound

Flags for playing the sound. The following values are defined.

Value Meaning
SND_APPLICATION The sound is played using an application-specific association.
SND_ALIAS The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE.
SND_ALIAS_ID The pszSound parameter is a predefined sound identifier.

...................................................................................................
[/quote]

Как мне узанать какое значение принимает каждый из флагов, а если ипользовать несколько тогда что?
Есть ли где-нибудь документация по значению параметров API ф-ций. В МСДНе про это ни слова не сказано.
Пока писал пост пришло решение - написать свою ДЛЛ на С, в которой буду вызывать API ф-ции с известными мне параметрами. Вот интересно есть ли другой способ?
406
23 октября 2007 года
vitaly2003s
481 / / 27.07.2004
Можно использовать комбинации флагов. Вот некоторые примеры использования из той же MSDN:

Using the PlaySound Function with Waveform Audio Files
PlaySound (TEXT("\\SOUNDS\\BELLS.WAV"), NULL, SND_SYNC | SND_NODEFAULT);
///////////////////
Using PlaySound with Registry-Specified Sounds
The PlaySound function also plays sounds that are referred to by a key name in the registry. Using this capability, you can let users assign selected or custom sounds to system alerts and warnings. Sounds that are associated with system alerts and warnings are called sound events.

To play a sound event

Call PlaySound, and set the pszSound parameter so that pzSound points to a string that contains the name of the registry entry that identifies the sound.
The following code example shows how to use PlaySound to play a sound event.

PlaySound (TEXT("MouseClick"), NULL, SND_SYNC);
///////////////
Using PlaySound with a Resource Identifier
The following code example shows how to use the PlaySound function to play a wave resource sound.

PlaySound (TEXT("soundName"), hInst, SND_RESOURCE | SND_ASYNC);
In contrast, the following code example shows how to use the sndPlaySound function to play a wave resource sound.
Код:
BOOL PlayResource (LPTSTR lpName)
{
  BOOL bRtn;
  LPTSTR lpRes;
  HANDLE hResInfo, hRes;

  // Find the wave resource.
  hResInfo = FindResource (hInst, lpName, "WAVE");

  if (hResInfo == NULL)
    return FALSE;

  // Load the wave resource.
  hRes = LoadResource (hInst, hResInfo);

  if (hRes == NULL)
    return FALSE;

  // Lock the wave resource and play it.
  lpRes = LockResource (hRes);
 
  if (lpRes != NULL)
    {
    bRtn = sndPlaySound (lpRes, SND_MEMORY | SND_SYNC | SND_NODEFAULT);
    }
  else
    bRtn = 0;

  return bRtn;
}


По моему все предельно ясно..
370
23 октября 2007 года
koval
443 / / 29.08.2005
Меня интересует исключительно использования подобных ф-ций в .Net а на С это действительно все предельно ясно.
406
23 октября 2007 года
vitaly2003s
481 / / 27.07.2004
тогда напиши конкретный вид данной функции с твоими аргументами этой функции которые ты не можешь реализовать в .Net(напиши так как ты бы написал на С). Надеюсь язык реализации на .Net будет C#
370
23 октября 2007 года
koval
443 / / 29.08.2005
Цитата: vitaly2003s
тогда напиши конкретный вид данной функции с твоими аргументами этой функции которые ты не можешь реализовать в .Net(напиши так как ты бы написал на С). Надеюсь язык реализации на .Net будет C#


Я могу реализовать. Как я писал раньше:

Цитата:

Пока писал пост пришло решение - написать свою ДЛЛ на С, в которой буду вызывать API ф-ции с известными мне параметрами.


Но мне интересно есть ли более человеческий способ, неужели мелкософт это не предусмотрело?
Ведь флаги в С это DWORD - значит должно принимать значения 1,2,3, и т.д. Интересно какое именно соотвествует данному флагу?
Есть ли документация по всем флагам API ф-ций?

257
23 октября 2007 года
kosfiz
1.6K / / 18.09.2005
а если значение этих SND_ глянуть скажем в mmsystem.h или не подходит?
370
23 октября 2007 года
koval
443 / / 29.08.2005
Цитата: kosfiz
а если значение этих SND_ глянуть скажем в mmsystem.h или не подходит?



Перед тем как создать эту тему я так и сделал. Воспользовался ф-цией MS VS 2005 Quick Find(Ctrl + F). Данный поиск мне ничего не дал. Позже я решил посмотреть какие include включает в себя файл mmsystem.h, на это мне поисковик опять ничего не дал, тогда я удивился и посмотрел повнимательнее на настройки поиска и увидел что стоит опция Look in = Current project. В этом то и была моя ошибка - проклятая невнимательность. Все всем спасибо. Извиняйте за мою невнимательность.:D

5
23 октября 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: koval
У меня возникла следующаяя проблема:
необходимо импортировать ф-цию WIN32 в управляемый код.
К примеру пусть это будет ф-ция
 
Код:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);


С первыми двумя параметрами все понятно, но вот третий параметр(флаг) вызывает некоторое недоумение...


Объявления:

Код:
[System.Flags]
public enum PlaySoundFlags : int {
    SND_SYNC = 0x0000,  /* play synchronously (default) */
    SND_ASYNC = 0x0001,  /* play asynchronously */
    SND_NODEFAULT = 0x0002,  /* silence (!default) if sound not found */
    SND_MEMORY = 0x0004,  /* pszSound points to a memory file */
    SND_LOOP = 0x0008,  /* loop the sound until next sndPlaySound */
    SND_NOSTOP = 0x0010 , /* don't stop any currently playing sound */

    SND_NOWAIT = 0x00002000L, /* don't wait if the driver is busy */
    SND_ALIAS = 0x00010000L, /* name is a registry alias */
    SND_ALIAS_ID = 0x00110000L, /* alias is a predefined ID */
    SND_FILENAME = 0x00020000L, /* name is file name */
    SND_RESOURCE = 0x00040004L, /* name is resource name or atom */
    SND_PURGE = 0x0040,  /* purge non-static events for task */
    SND_APPLICATION = 0x0080  /* look for application specific association */
}

[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true)]
public static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);

К элементам перечисления PlaySoundFlags употребимы побитовые операции.


З.Ы. Значения и комменты для PlaySoundFlags сперты из Mmsystem.h в BDS2006
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог