Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //DLL.h
- #pragma once
- #include <Windows.h>
- #include <tchar.h>
- //ttsmf0.dllの関数ポインタ
- struct ttsmf0Function
- {
- HMODULE ttsmfDLL; //DLLのモジュールハンドル
- HANDLE (__stdcall *CreateSmfFunc)(short Timebase);
- BOOL (__stdcall *DeleteSmfFunc)(HANDLE hSmf);
- HANDLE (__stdcall *CopySmfFunc)(HANDLE hSmf);
- BOOL (__stdcall *SaveSmfFunc)(HANDLE hSmf, char *lpszFileName, DWORD fdwCreate, DWORD fdwAttrsAndFlags);
- BOOL (__stdcall *GetSmfDataSizeFunc)(HANDLE hSmf, LPDWORD pDestSize);
- BOOL (__stdcall *GetSmfDataFunc)(HANDLE hSmf, LPBYTE pDest, DWORD DestSize);
- BOOL (__stdcall *CopyToClipboardFunc)(HANDLE hSmf);
- BOOL (__stdcall *InsertMidiEventFunc)(HANDLE hSmf, DWORD Tick, BYTE *pData, int DataSize);
- BOOL (__stdcall *InsertSysexEventFunc)(HANDLE hSmf, DWORD Tick, BYTE *pData, int DataSize);
- BOOL (__stdcall *InsertMetaEventFunc)(HANDLE hSmf, DWORD Tick, BYTE MetaType, BYTE *pData, int DataSize);
- BOOL (__stdcall *cal_insert_NoteFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Key, LONG Velocity, DWORD Duration);
- BOOL (__stdcall *cal_insert_KeyAftFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Key, LONG Amount);
- BOOL (__stdcall *cal_insert_ControlFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG ControlNumber, LONG Value);
- BOOL (__stdcall *cal_insert_ChanAftFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Amount);
- BOOL (__stdcall *cal_insert_PatchFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG PatchNumber, LONG BankNumber);
- BOOL (__stdcall *cal_insert_WheelFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Value);
- BOOL (__stdcall *calex_insert_RPNFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Number, LONG Value);
- BOOL (__stdcall *calex_insert_NRPNFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Number, LONG Value);
- BOOL (__stdcall *calex_insert_SysxFunc)(HANDLE hSmf, DWORD Tick, char *lpszSysx);
- BOOL (__stdcall *calex_insert_TextFunc)(HANDLE hSmf, DWORD Tick, char *lpszText);
- BOOL (__stdcall *calex_insert_LyricFunc)(HANDLE hSmf, DWORD Tick, char *lpszLyric);
- };
- extern ttsmf0Function ttsmf0;
- BOOL LoadttSmf0DLL();
- BOOL ReleasettSmf0DLL();
- //Dll.cpp
- #include "Dll.h"
- ttsmf0Function ttsmf0;
- //ttsmf0.dllをロードする関数
- BOOL LoadttSmf0DLL()
- {
- //ttsmf0.dllをロードする
- if (ttsmf0.ttsmfDLL == NULL)
- {
- ttsmf0.ttsmfDLL = LoadLibrary(_T("ttsmf0.dll"));
- //ttsmf0.dllの関数ポインタを設定する
- ttsmf0.CreateSmfFunc = (HANDLE(__stdcall *)(short))GetProcAddress(ttsmf0.ttsmfDLL, "CreateSmf");
- ttsmf0.DeleteSmfFunc = (BOOL(_stdcall *)(HANDLE))GetProcAddress(ttsmf0.ttsmfDLL, "DeleteAdmf");
- ttsmf0.CopySmfFunc = (HANDLE(__stdcall*)(HANDLE))GetProcAddress(ttsmf0.ttsmfDLL, "CopySmf");
- ttsmf0.SaveSmfFunc = (BOOL(__stdcall*)(HANDLE, char *, DWORD, DWORD))GetProcAddress(ttsmf0.ttsmfDLL, "SaveSmf");
- ttsmf0.GetSmfDataSizeFunc = (BOOL(__stdcall*)(HANDLE, LPDWORD))GetProcAddress(ttsmf0.ttsmfDLL, "GetSmfDataSize");
- ttsmf0.GetSmfDataFunc = (BOOL(__stdcall*)(HANDLE, LPBYTE, DWORD))GetProcAddress(ttsmf0.ttsmfDLL, "GetSmfData");
- ttsmf0.CopyToClipboardFunc = (BOOL(__stdcall*)(HANDLE))GetProcAddress(ttsmf0.ttsmfDLL, "CopyToClipboard");
- ttsmf0.InsertMidiEventFunc = (BOOL(__stdcall*)(HANDLE, DWORD, BYTE*, int))GetProcAddress(ttsmf0.ttsmfDLL, "InsertMidiEvent");
- ttsmf0.InsertMetaEventFunc = (BOOL(__stdcall *)(HANDLE, DWORD, BYTE, BYTE *, int))GetProcAddress(ttsmf0.ttsmfDLL, "InsertMetaEvent");
- ttsmf0.cal_insert_NoteFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG, DWORD))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Note");
- ttsmf0.cal_insert_KeyAftFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_KeyAft");
- ttsmf0.cal_insert_ControlFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Control");
- ttsmf0.cal_insert_ChanAftFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_ChanAft");
- ttsmf0.cal_insert_PatchFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Patch");
- ttsmf0.cal_insert_WheelFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Wheel");
- ttsmf0.calex_insert_RPNFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_RPN");
- ttsmf0.calex_insert_NRPNFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_NRPN");
- ttsmf0.calex_insert_SysxFunc = (BOOL(__stdcall *)(HANDLE, DWORD, char *))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_Sysx");
- ttsmf0.calex_insert_TextFunc = (BOOL(__stdcall *)(HANDLE, DWORD, char *))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_Text");
- ttsmf0.calex_insert_LyricFunc = (BOOL(__stdcall *)(HANDLE, DWORD, char *))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_Lyric");
- }
- else //ロードできていなければFALSEを返す
- {
- return FALSE;
- }
- //ロードができていてかつ関数ポインタを設定しているならTRUEを返す
- return TRUE;
- }
- //ttsmf0.dllをアンロードする関数
- BOOL ReleasettSmf0DLL()
- {
- //DLLのハンドルが存在していたら
- if (ttsmf0.ttsmfDLL)
- {
- FreeLibrary(ttsmf0.ttsmfDLL);
- ttsmf0.ttsmfDLL = NULL;
- }
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement