# Linked to main dmusic.dll for easier implementation

1 stdcall DllCanUnloadNow() dmusic.DllCanUnloadNow
2 stdcall DllGetClassObject(long long ptr) dmusic.DllGetClassObject
3 stdcall DllRegisterServer() dmusic.DllRegisterServer
4 stdcall DllUnregisterServer() dmusic.DllUnregisterServer
