Advertisement
Naohiro19

DLL Loader

Apr 12th, 2014
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.30 KB | None | 0 0
  1. //DLL.h
  2. #pragma once
  3.  
  4. #include <Windows.h>
  5. #include <tchar.h>
  6.  
  7. //ttsmf0.dllの関数ポインタ
  8. struct ttsmf0Function
  9. {
  10.     HMODULE ttsmfDLL; //DLLのモジュールハンドル
  11.    
  12.     HANDLE (__stdcall *CreateSmfFunc)(short Timebase);
  13.     BOOL (__stdcall *DeleteSmfFunc)(HANDLE hSmf);
  14.     HANDLE (__stdcall *CopySmfFunc)(HANDLE hSmf);
  15.     BOOL (__stdcall *SaveSmfFunc)(HANDLE hSmf, char *lpszFileName, DWORD fdwCreate, DWORD fdwAttrsAndFlags);
  16.     BOOL (__stdcall *GetSmfDataSizeFunc)(HANDLE hSmf, LPDWORD pDestSize);
  17.     BOOL (__stdcall *GetSmfDataFunc)(HANDLE hSmf, LPBYTE pDest, DWORD DestSize);
  18.     BOOL (__stdcall *CopyToClipboardFunc)(HANDLE hSmf);
  19.     BOOL (__stdcall *InsertMidiEventFunc)(HANDLE hSmf, DWORD Tick, BYTE *pData, int DataSize);
  20.     BOOL (__stdcall *InsertSysexEventFunc)(HANDLE hSmf, DWORD Tick, BYTE *pData, int DataSize);
  21.     BOOL (__stdcall *InsertMetaEventFunc)(HANDLE hSmf, DWORD Tick, BYTE MetaType, BYTE *pData, int DataSize);
  22.     BOOL (__stdcall *cal_insert_NoteFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Key, LONG Velocity, DWORD Duration);
  23.     BOOL (__stdcall *cal_insert_KeyAftFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Key, LONG Amount);
  24.     BOOL (__stdcall *cal_insert_ControlFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG ControlNumber, LONG Value);
  25.     BOOL (__stdcall *cal_insert_ChanAftFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Amount);
  26.     BOOL (__stdcall *cal_insert_PatchFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG PatchNumber, LONG BankNumber);
  27.     BOOL (__stdcall *cal_insert_WheelFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Value);
  28.     BOOL (__stdcall *calex_insert_RPNFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Number, LONG Value);
  29.     BOOL (__stdcall *calex_insert_NRPNFunc)(HANDLE hSmf, DWORD Tick, LONG MidiChannel, LONG Number, LONG Value);
  30.     BOOL (__stdcall *calex_insert_SysxFunc)(HANDLE hSmf, DWORD Tick, char *lpszSysx);
  31.     BOOL (__stdcall *calex_insert_TextFunc)(HANDLE hSmf, DWORD Tick, char *lpszText);
  32.     BOOL (__stdcall *calex_insert_LyricFunc)(HANDLE hSmf, DWORD Tick, char *lpszLyric);
  33. };
  34.  
  35. extern ttsmf0Function ttsmf0;
  36.  
  37. BOOL LoadttSmf0DLL();
  38. BOOL ReleasettSmf0DLL();
  39.  
  40. //Dll.cpp
  41. #include "Dll.h"
  42.  
  43. ttsmf0Function ttsmf0;
  44.  
  45. //ttsmf0.dllをロードする関数
  46. BOOL LoadttSmf0DLL()
  47. {
  48.     //ttsmf0.dllをロードする
  49.     if (ttsmf0.ttsmfDLL == NULL)
  50.     {
  51.         ttsmf0.ttsmfDLL = LoadLibrary(_T("ttsmf0.dll"));
  52.         //ttsmf0.dllの関数ポインタを設定する
  53.         ttsmf0.CreateSmfFunc = (HANDLE(__stdcall *)(short))GetProcAddress(ttsmf0.ttsmfDLL, "CreateSmf");
  54.         ttsmf0.DeleteSmfFunc = (BOOL(_stdcall *)(HANDLE))GetProcAddress(ttsmf0.ttsmfDLL, "DeleteAdmf");
  55.         ttsmf0.CopySmfFunc = (HANDLE(__stdcall*)(HANDLE))GetProcAddress(ttsmf0.ttsmfDLL, "CopySmf");
  56.         ttsmf0.SaveSmfFunc = (BOOL(__stdcall*)(HANDLE, char *, DWORD, DWORD))GetProcAddress(ttsmf0.ttsmfDLL, "SaveSmf");
  57.         ttsmf0.GetSmfDataSizeFunc = (BOOL(__stdcall*)(HANDLE, LPDWORD))GetProcAddress(ttsmf0.ttsmfDLL, "GetSmfDataSize");
  58.         ttsmf0.GetSmfDataFunc = (BOOL(__stdcall*)(HANDLE, LPBYTE, DWORD))GetProcAddress(ttsmf0.ttsmfDLL, "GetSmfData");
  59.         ttsmf0.CopyToClipboardFunc = (BOOL(__stdcall*)(HANDLE))GetProcAddress(ttsmf0.ttsmfDLL, "CopyToClipboard");
  60.         ttsmf0.InsertMidiEventFunc = (BOOL(__stdcall*)(HANDLE, DWORD, BYTE*, int))GetProcAddress(ttsmf0.ttsmfDLL, "InsertMidiEvent");
  61.         ttsmf0.InsertMetaEventFunc = (BOOL(__stdcall *)(HANDLE, DWORD, BYTE, BYTE *, int))GetProcAddress(ttsmf0.ttsmfDLL, "InsertMetaEvent");
  62.         ttsmf0.cal_insert_NoteFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG, DWORD))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Note");
  63.         ttsmf0.cal_insert_KeyAftFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_KeyAft");
  64.         ttsmf0.cal_insert_ControlFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Control");
  65.         ttsmf0.cal_insert_ChanAftFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_ChanAft");
  66.         ttsmf0.cal_insert_PatchFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Patch");
  67.         ttsmf0.cal_insert_WheelFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "cal_insert_Wheel");
  68.         ttsmf0.calex_insert_RPNFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_RPN");
  69.         ttsmf0.calex_insert_NRPNFunc = (BOOL(__stdcall *)(HANDLE, DWORD, LONG, LONG, LONG))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_NRPN");
  70.         ttsmf0.calex_insert_SysxFunc = (BOOL(__stdcall *)(HANDLE, DWORD, char *))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_Sysx");
  71.         ttsmf0.calex_insert_TextFunc = (BOOL(__stdcall *)(HANDLE, DWORD, char *))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_Text");
  72.         ttsmf0.calex_insert_LyricFunc = (BOOL(__stdcall *)(HANDLE, DWORD, char *))GetProcAddress(ttsmf0.ttsmfDLL, "calex_insert_Lyric");
  73.  
  74.     }
  75.     else //ロードできていなければFALSEを返す
  76.     {
  77.         return FALSE;
  78.     }
  79.     //ロードができていてかつ関数ポインタを設定しているならTRUEを返す
  80.     return TRUE;
  81. }
  82.  
  83. //ttsmf0.dllをアンロードする関数
  84. BOOL ReleasettSmf0DLL()
  85. {
  86.     //DLLのハンドルが存在していたら
  87.     if (ttsmf0.ttsmfDLL)
  88.     {
  89.         FreeLibrary(ttsmf0.ttsmfDLL);
  90.         ttsmf0.ttsmfDLL = NULL;
  91.     }
  92.    
  93.     return TRUE;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement