Hej! Mam pewien problem z biblioteką DLL...
Obudowałem funkcje PlaySound (w celach testowych) no i niestety nie działa... Zamiast nazwy pliku to przekazywane są kwadraciki... Biblioteka kompilowana w MS Visual Studo 2010 C++ (jako natywna)
Kod biblioteki dll
MUZYKADLL_API void odtwarzajWAV(LPCTSTR plikWAV, bool czyZapetlic)
{
if (czyZapetlic == true)
{
PlaySound(plikWAV, NULL, SND_FILENAME || SND_LOOP);
}
else
{
PlaySound(plikWAV, NULL, SND_FILENAME);
}
MessageBox(NULL, plikWAV, L"Informacja", MB_ICONINFORMATION | MB_OK);
}
nagłówek
extern MUZYKADLL_API int nmuzykadll;
MUZYKADLL_API int fnmuzykadll(void);
extern "C" MUZYKADLL_API void odtwarzajWAV(LPCTSTR plikWAV, bool czyZapetlic);
No i teraz program który korzysta z tej przykładowej funkcji (kompilowany w wxWidgets, MinGW)
void wxDLLTest1Dlg::WxButton1Click(wxCommandEvent& event)
{
// insert your code here
LPCTSTR plikWAV;
plikWAV = "tada.wav";
hDll = LoadLibrary( "muzykadll.dll" );
if( hDll != NULL )
{
informacja =( MYPROC ) GetProcAddress( hDll, "informacja" );
if( informacja != NULL )
{
informacja();
}
else
{
wxMessageBox( wxT("Błąd wykonywania funkcji w bibliotece DLL. ") );
}
odtwarzajWAV =( MYPROC2 ) GetProcAddress( hDll, "odtwarzajWAV" );
if( odtwarzajWAV != NULL )
{
odtwarzajWAV(plikWAV, false);
// tutaj dobrze pokazuje nazwe pliku w tym okienku ale funkcja nie odtwarza dzwieku
MessageBox(0, plikWAV, "Informacja", MB_ICONINFORMATION | MB_OK);
}
else
{
wxMessageBox( wxT("Błąd wykonywania funkcji w bibliotece DLL. ") );
}
}
else
{
wxMessageBox( wxT("Błąd wczytania biblioteki DLL. ") );
}
plik nagłówkowy
typedef void( * MYPROC2 )(LPCTSTR, bool );
MYPROC2 odtwarzajWAV;
HINSTANCE hDll;
Cóż, to okienko wywoływane z wxWidgets pokazuje nazwę pliku (jako typ LPCTSTR), a po przekazaniu tego typu danych do funkcji coś się krzaczy (same kwadraciki są jako tekst), tak więc nie odtwarza wskazanej nazwy pliku...
Niby jest zgodność typów danych między parametrem funkcji a przekazywanymi danymi ale coś jest nie tak :/
Wywołanie bezpośrednio funkcji SoundPlay działa bez problemu w samy wxWidgets...