ほい
一応いっとくけど、Cの質問はここではやっちゃいかんぞ?
#include <windows.h>
#include "hsp3plugin.h"
#include <vfw.h>
#include <string>
#define tstring string
#pragma comment (lib, "vfw32.lib")
int flag[2];
BOOL SaveAviFile(LPTSTR lpszFileName, PAVISTREAM paviVideo, PAVISTREAM paviAudio)
{
int i;
PAVISTREAM pavis[2];
AVICOMPRESSOPTIONS options[2];
LPAVICOMPRESSOPTIONS lpOptions[2];
for (i = 0; i < 2; i++) {
ZeroMemory(&options[i], sizeof(AVICOMPRESSOPTIONS));
lpOptions[i] = &options[i];
}
pavis[0] = paviVideo;
pavis[1] = paviAudio;
void* x;
if(flag[0])
{
if (!AVISaveOptions(NULL, 0, 2, pavis, lpOptions))
return FALSE;
x = lpOptions;
}else{
x = NULL;
}
if (AVISaveV(lpszFileName, NULL, NULL, 2, pavis, (LPAVICOMPRESSOPTIONS*)x) != AVIERR_OK) {
MessageBox(NULL, TEXT("AVIファイルの作成に失敗しました"), NULL, MB_ICONWARNING);
AVISaveOptionsFree(2, lpOptions);
return FALSE;
}
AVISaveOptionsFree(2, lpOptions);
return TRUE;
}
static int cmdfunc( int cmd )
{
// 実行処理 (命令実行時に呼ばれます)
//
code_next(); // 次のコードを取得(最初に必ず必要です)
PAVISTREAM paviVideo;
PAVISTREAM paviAudio;
std::tstring inavi(code_gets());
std::tstring inwav(code_gets());
std::tstring newavi(code_gets());
flag[0] = code_getdi( FALSE );
flag[1] = code_getdi( FALSE );
AVIFileInit();
if (AVIStreamOpenFromFile(&paviVideo, inavi.c_str(), streamtypeVIDEO, 0, OF_READ, NULL) != 0) {
MessageBox(NULL, TEXT("ファイルまたはビデオストリームが存在しません。"), TEXT("OK"), MB_OK);
AVIFileExit();
return 0;
}
if (AVIStreamOpenFromFile(&paviAudio, inwav.c_str(), streamtypeAUDIO, 0, OF_READ, NULL) != 0) {
MessageBox(NULL, TEXT("ファイルまたはオーディオストリームが存在しません。"), TEXT("OK"), MB_OK);
AVIStreamRelease(paviVideo);
AVIFileExit();
return 0;
}
if (SaveAviFile((TCHAR*)newavi.c_str(), paviVideo, paviAudio))
{
if(flag[1])
MessageBox(NULL, TEXT("AVIファイルを作成しました。"), TEXT("OK"), MB_OK);
}
AVIStreamRelease(paviAudio);
AVIStreamRelease(paviVideo);
AVIFileExit();
return RUNMODE_RUN;
}
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE;
}
EXPORT void WINAPI hsp3cmdinit( HSP3TYPEINFO *info )
{
hsp3sdk_init( info ); // SDKの初期化(最初に行なって下さい)
info->cmdfunc = cmdfunc; // 実行関数(cmdfunc)の登録
}