Autor
|
Tema: Load wav file from res in a dll (Leído 7,579 veces)
|
ntaryl
Desconectado
Mensajes: 95
|
Good evening I try this time to load a res wav file from dll .but no luck use this example but i dont know what the wrong i successed to load from main project and after try from dll but something is wrong someone can point me to the correct way
|
|
|
En línea
|
|
|
|
ssccaann43 ©
Desconectado
Mensajes: 792
¬¬
|
You need to upload the file .RES in the project and then want to upload .DLL file? I do not know much you need to do. Do you have a source?
|
|
|
En línea
|
- Miguel Núñez Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio... "I like ^TiFa^"
|
|
|
el_c0c0
Desconectado
Mensajes: 307
|
Good evening I try this time to load a res wav file from dll .but no luck use this example but i dont know what the wrong i successed to load from main project and after try from dll but something is wrong someone can point me to the correct way
hi nyaryl, well, i remember that .. isnt hard... here you got a TIP to do that: http://www.devx.com/tips/Tip/12595by
|
|
|
En línea
|
'- coco "Te voy a romper el orto"- Las hemorroides
|
|
|
ntaryl
Desconectado
Mensajes: 95
|
thanks for the fast reply this is my example http://rapidshare.com/files/337400568/res-dll.rar.htmlthanks for the tips El_coco in local way is ok only with the dll i cant Thanks for the time the example come from thevbzone
|
|
« Última modificación: 18 Enero 2010, 22:19 pm por ntaryl »
|
En línea
|
|
|
|
el_c0c0
Desconectado
Mensajes: 307
|
i think you could load the dll, and get it hInstance, so, use that instead app.hinstance. i really dont know if it will work, but you can check. BTW. i can't download your example, beacause stupid rapid share is overloaded! by
|
|
|
En línea
|
'- coco "Te voy a romper el orto"- Las hemorroides
|
|
|
seba123neo
|
the code in the Command3 is wrong...this line of code: strFilePath = "\Sound.dll"
replace with this: strFilePath = "Sound.dll"
the line "\" is wrong... and this: hResource = FindResource(hLibrary, "#101" & CStr(1) & Chr(0), "wave" & Chr(0))
replace with this: hResource = FindResource(hLibrary, "#101", "CUSTOM")
The final code is: Dim strString As String Dim so As Integer Dim lngStringLen As Long, hResource As Long, hdata As Long Dim lpData As Long Dim strFilePath As String Dim hLibrary As Long strFilePath = "Sound.dll" hLibrary = LoadLibrary(strFilePath & Chr(0)) hResource = FindResource(hLibrary, "#101", "CUSTOM") hdata = LoadResource(hLibrary, hResource) lpData = LockResource(hdata) PlaySound ByVal lpData, 0, SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY FreeLibrary hLibrary
the sound sounds good... greetings.
|
|
|
En línea
|
|
|
|
el_c0c0
Desconectado
Mensajes: 307
|
...
very good seba. and the thing to use SND_ASYNC its good too, to not lock the process. bye
|
|
|
En línea
|
'- coco "Te voy a romper el orto"- Las hemorroides
|
|
|
ntaryl
Desconectado
Mensajes: 95
|
Thanks guys for the answer and also to spent time in my post . seba123neo : i change the commend3 with this code and when run the project crash my vb ide also when run it compile crash again in ur pc work fine ? thanks for the time http://img521.imageshack.us/img521/7886/errorwx.jpgthanks for ur time also El_coco
|
|
|
En línea
|
|
|
|
ntaryl
Desconectado
Mensajes: 95
|
thanks again with this example my project crash i try to use it again and this work Dim strFilePath As String Dim hLibrary As Long Dim hResource As Long Dim hData As Long Dim lpData As Long ' Get the path to the Resource DLL strFilePath = "Sound.dll" ' Load the Resource DLL hLibrary = LoadLibrary(strFilePath & Chr(0)) If hLibrary = 0 Then MsgBox "Failed to load the specified library with error code " & Err.LastDllError Exit Sub End If ' Get a .WAV file from the Resource DLL hResource = FindResource(hLibrary, "#101", "CUSTOM") If hResource <> 0 Then hData = LoadResource(hLibrary, hResource) 'This gets a handle to the data If hData <> 0 Then lpData = LockResource(hData) 'This gets a POINTER to the data... which is what we need If lpData <> 0 Then PlaySound ByVal lpData, 0, SND_MEMORY Or SND_NODEFAULT Or SND_SYNC End If End If End If ' Close the Resource DLL FreeLibrary hLibrary
have a good afternoon
|
|
|
En línea
|
|
|
|
cobein
|
Actually theres a simpler way to do it, the only thing you have to do is use some resource editor(Resource Builder will work) add the resource as WAVE instead of CUSTOM and then some code like this one. Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long Private Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long
Private Const LOAD_LIBRARY_AS_DATAFILE As Long = &H2 Private Const SND_ASYNC As Long = &H1 Private Const SND_RESOURCE As Long = &H40004
Private Sub Form_Load() Dim lLib As Long lLib = LoadLibraryEx("C:\Documents and Settings\Cobein\Escritorio\proyecto1.dll", 0, LOAD_LIBRARY_AS_DATAFILE) Debug.Print PlaySound("WAVE_0", lLib, SND_ASYNC Or SND_RESOURCE) End Sub
|
|
|
En línea
|
|
|
|
|
|