www.pudn.com > mysee.zip > DLLExport.cpp


/* 
 *  Openmysee 
 * 
 *  This program is free software; you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation; either version 2 of the License, or 
 *  (at your option) any later version. 
 * 
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details. 
 * 
 *  You should have received a copy of the GNU General Public License 
 *  along with this program; if not, write to the Free Software 
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 * 
 */ 
// DLLExport.cpp : Defines the entry point for the DLL application. 
// 
 
#include "stdafx.h" 
#include "GraphCenter.h" 
//CGraphCenter loGraphCenter 
BOOL WINAPI DllMain( HANDLE hModule,  
					  DWORD  ul_reason_for_call,  
					  LPVOID lpReserved 
					  ) 
{ 
	//DbgSetModuleLevel(LOG_TRACE, 5); 
	return TRUE; 
} 
 
//创建 
extern "C" __declspec(dllexport) HANDLE CreateGetZZL() 
{ 
	HRESULT hr; 
	CGraphCenter *lpGraphCenter = NULL;	 
	lpGraphCenter = new CGraphCenter; 
	if (lpGraphCenter == NULL) 
	{ 
		return NULL; 
	} 
	hr = lpGraphCenter->Initialize(); 
	if (FAILED(hr)) 
	{ 
		return NULL; 
	} 
	return lpGraphCenter; 
} 
 
 
//设置源avi文件 
//ahInstance ——实例句柄,astrFileName——源avi文件名,astrZZLDirectory ——ZZL文件夹,astrZZLFile——ZZL文件名  
extern "C" __declspec(dllexport) BOOL SetFileName(HANDLE ahInstance, LPCTSTR astrFileName, LPCTSTR astrZZLDirectory, LPCTSTR astrZZLFile) 
{ 
	assert(ahInstance); 
	if (NULL == ahInstance) 
	{ 
		MessageBox(NULL, "动态连接库的句柄不对,请重新创建。", "错误", MB_OK|MB_ICONSTOP); 
		return FALSE; 
	} 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
	HRESULT hr; 
 
	char lszZZLFile[MAXLENGTH]; 
	strcpy(lszZZLFile, astrZZLFile); 
	 
	char* lpByte; 
	lpByte = strrchr(lszZZLFile, '.'); 
	if (NULL != lpByte) 
	{ 
		*lpByte = '\0'; 
	} 
 
	do 
	{ 
		-- lpByte; 
	} 
	while (*lpByte == ' '); 
	*(++ lpByte) = '\0'; 
 
	hr = lpGraphCenter->BuildGraph(astrFileName, astrZZLDirectory, lszZZLFile); 
	if (FAILED(hr)) 
	{ 
		//MessageBox(NULL,"转化过程意外中断,可能是用户取消操作,也可能是源文件只有视频", "注意", MB_OK|MB_ICONINFORMATION); 
		TraceLog1("%s转化过程意外中断,可能是用户取消操作,也可能是源文件只有视频\n", lszZZLFile); 
		return FALSE; 
	} 
	return TRUE;  
} 
 
//开始转化AVI 
extern "C" __declspec(dllexport) BOOL Run(HANDLE ahInstance) 
{ 
	HRESULT hr; 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
	hr = lpGraphCenter->Run(); 
	if (FAILED(hr)) 
	{ 
		return FALSE; 
	} 
	return TRUE;	 
} 
 
extern "C" __declspec(dllexport) BOOL Stop(HANDLE ahInstance) 
{ 
	HRESULT hr; 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
	hr = lpGraphCenter->Stop(); 
	if (FAILED(hr)) 
	{ 
		return FALSE; 
	} 
	return TRUE; 
} 
 
//0为运行,1为停止。-1为发生意外错误停止 
extern "C" __declspec(dllexport) int GetState(HANDLE ahInstance) 
{ 
	assert(ahInstance); 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
	return lpGraphCenter->GetState(); 
} 
 
extern "C" __declspec(dllexport) float GetCompressedSpeed(HANDLE ahInstance) 
{ 
	assert(ahInstance); 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
	if (0 != lpGraphCenter->GetState()) 
	{ 
		return 0; 
	}	 
	return lpGraphCenter->GetCompressedSpeed(); 
} 
 
extern "C" __declspec(dllexport) void SetStateProc(HANDLE ahInstance, GetZZLState* apStateproc, void* apUserPara) 
{ 
	assert(ahInstance); 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
	lpGraphCenter->SetStateProc(apStateproc, apUserPara); 
	 
} 
 
extern "C" __declspec(dllexport) void CloseGetZZL(HANDLE ahInstance) 
{ 
	assert(ahInstance); 
	CGraphCenter* lpGraphCenter = (CGraphCenter*)ahInstance; 
 
	delete lpGraphCenter; 
	lpGraphCenter = NULL;	 
}