C
du must die DLL zuerst in den Adressraum deines Prozesses laden:
HMODULE WINAPI LoadLibrary(
_In_ LPCTSTR lpFileName <-- Pfad zur DLL, z.B. C:\audio.dll
);
Gut, nun ist die DLL von deinem Prozess aus "sichtbar".
Die DLL hat Funktionen, die sie bereitstellt. Lade dir Dependency Walker runter, damit kannst du sehen, welche Funktionen die DLL anbietet und wie diese heißen.
In der Doku der Audio DLL solltest du das aber auch finden können.
So, du weißt nun wie die Funktion heißt, die du brauchst?
Na dann hol dir die Funktionsadresse!
FARPROC WINAPI GetProcAddress(
_In_ HMODULE hModule, <-- hier Handle einfügen, den du von LoadLibrary bekommen hast
_In_ LPCSTR lpProcName <-- Name der Funktion (siehe DependencyWalker)
);
Nun hast du die Funktionsadresse.
Jetzt kannst du die Funktion bereits aufrufen, naja, fast.
Du musst den Typ der Funktion kennen. Das findest du in der Doku, und wahrscheinlich gibt es auch eine Headerdatei wo die Funktionstypen bereits deklariert sind.
Siehe dazu auch das Thema Funktionszeiger.
Beispielsweise für die Funktion void irgendwas(int); sieht der Funktionszeigertyp so aus:
void (*FuncPtr_t)(int);
Jetzt wo du den Typ hast, kannst du eine Variable anlegen, die die Adresse der DLL Funktion speichert.
FuncPtr_t meineFunktion=GetProcAddress(...);
Ab jetzt kannst du ganz normal mit der Funktion arbeiten, wie du es eben von Funktionen gewöhnt bist, also z.B. meineFunktion(42); aufrufen.
Wie du die Funktionen verwendest entnimmst du am besten der Doku.
Wichtig ist hier, dass PortAudio eine C-Schnittstelle bereitstellt, die ich jedoch in C++ konsumieren möchte (hierzu gibt die FAQ von PortAudio eine Hilfestellung, die mir aber mangels Erfahrung in Unmanged C++ nicht so wirklich klar ist).
DLLs bieten immer eine C Schnittstelle, und das ist auch gut so.
Mit der C SChnittstelle können alle anderen Sprachen auch, mit C++ hingegen nicht.
Du kannst dir aber einen "Wrapper" um die blanken C Funktionen schreiben.