Click here to Skip to main content
15,885,933 members
Home / Discussions / COM
   

COM

 
AnswerRe: Configure DCOM component on my computer Pin
Randor 21-Nov-08 6:39
professional Randor 21-Nov-08 6:39 
QuestionHow to register COM components into C#.Net window applications Pin
veereshIndia17-Nov-08 22:31
veereshIndia17-Nov-08 22:31 
Questioncalling c# com object from c++ Pin
Liat Even17-Nov-08 3:33
Liat Even17-Nov-08 3:33 
AnswerRe: calling c# com object from c++ Pin
Baltoro22-Nov-08 10:48
Baltoro22-Nov-08 10:48 
QuestionCOM Module goes off... Pin
SRKSHOME16-Nov-08 23:29
SRKSHOME16-Nov-08 23:29 
QuestionHow to hook IWiaDevMgr? Pin
Kenlin042712-Nov-08 18:40
Kenlin042712-Nov-08 18:40 
QuestionNew interface Pin
kDevloper12-Nov-08 18:32
kDevloper12-Nov-08 18:32 
Questionwhat error occurren in this code? Pin
jackyxinli12-Nov-08 15:43
jackyxinli12-Nov-08 15:43 
i crate a class CAudio, which implementes from IStream, and it's code like below:
#include "objidl.h"

#ifndef INCLUDE_AUDIOSTREAM
#define INCLUDE_AUDIOSTREAM

class CAudioStream :
	public IStream
{
private:
	LONG m_cRef;
	HANDLE m_hFile;
public:
	CAudioStream(TCHAR* pszFileName);
	~CAudioStream(void);

	HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
	ULONG STDMETHODCALLTYPE AddRef(void);
	ULONG STDMETHODCALLTYPE Release(void);

	HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead);
	HRESULT STDMETHODCALLTYPE Write(const void *pv, ULONG cb, ULONG *pcbWritten);

	HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition);
	HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER libNewSize);
	HRESULT STDMETHODCALLTYPE CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten);
	HRESULT STDMETHODCALLTYPE Commit(DWORD grfCommitFlags);
	HRESULT STDMETHODCALLTYPE Revert(void);
	HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
	HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
	HRESULT STDMETHODCALLTYPE Stat(STATSTG *pstatstg, DWORD grfStatFlag);
	HRESULT STDMETHODCALLTYPE Clone(IStream **ppstm);
};

#endif


#include "StdAfx.h"
#include "AudioStream.h"

CAudioStream::CAudioStream(TCHAR* pszFileName)
{
	m_cRef = 0;
	m_hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
		FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_NORMAL, NULL);
	if(m_hFile == INVALID_HANDLE_VALUE)
		MessageBox(GetActiveWindow(), "can not open file.", "error", MB_OK);
}

CAudioStream::~CAudioStream(void)
{
	if(m_hFile != INVALID_HANDLE_VALUE)
		CloseHandle(m_hFile);

	m_hFile = INVALID_HANDLE_VALUE;
}

HRESULT STDMETHODCALLTYPE CAudioStream::QueryInterface(const IID &riid, void **ppvObject)
{
	if(IID_IStream == riid || IID_IUnknown == riid)
	{
		*ppvObject = static_cast<IStream*>(this);
		AddRef();
		return S_OK;
	}

	*ppvObject = NULL;
	return E_NOINTERFACE;
}

ULONG STDMETHODCALLTYPE CAudioStream::AddRef()
{
	return InterlockedIncrement(&m_cRef);
}

ULONG STDMETHODCALLTYPE CAudioStream::Release()
{
	if(InterlockedDecrement(&m_cRef) == 0)
	{
		delete this;
		return S_OK;
	}

	return m_cRef;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Read(void *pv, ULONG cb, ULONG *pcbRead)
{
	if(!ReadFile(m_hFile, pv, cb, pcbRead, NULL))
		return E_FAIL;

	if(*pcbRead <= 0)
		return E_FAIL;

	return S_OK;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Write(const void *pv, ULONG cb, ULONG *pcbWritten)
{
	if(!WriteFile(m_hFile, pv, cb, pcbWritten, NULL))
		return E_FAIL;

	if(*pcbWritten <= 0)
		return E_FAIL;

	return S_OK;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
{
	plibNewPosition->QuadPart = SetFilePointer(m_hFile, dlibMove.LowPart, NULL, dwOrigin);
	return S_OK;
}

HRESULT STDMETHODCALLTYPE CAudioStream::SetSize(ULARGE_INTEGER libNewSize)
{
	SetFilePointer(m_hFile, libNewSize.LowPart, NULL, 0);
	return S_OK;
}

HRESULT STDMETHODCALLTYPE CAudioStream::CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten)
{
	return -1;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Commit(DWORD grfCommitFlags)
{
	return -1;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Revert(void)
{
	return -1;
}

HRESULT STDMETHODCALLTYPE CAudioStream::LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
{
	return -1;
}

HRESULT STDMETHODCALLTYPE CAudioStream::UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
{
	return -1;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Stat(STATSTG *pstatstg, DWORD grfStatFlag)
{
	pstatstg->cbSize.QuadPart = GetFileSize(m_hFile, NULL);
	pstatstg->grfLocksSupported = 0;
	return -1;
}

HRESULT STDMETHODCALLTYPE CAudioStream::Clone(IStream **ppstm)
{
	return -1;
}


test code like below:
#include "stdafx.h"
#include "AudioStream.h"

int main(int argc, char* argv[])
{
	CoInitialize(NULL);
	CAudioStream* pAudioStream = NULL;
	

	IWMSyncReader* reader;
	HRESULT hr;

	hr = WMCreateSyncReader(NULL, 0, &reader);
	if(hr != S_OK)
	{
		CoUninitialize();
		return 0;
	}

	pAudioStream = new CAudioStream("d:\\Music\\You&Me.mp3");
	IStream* pStream = static_cast<IStream*>(pAudioStream);
	pStream->AddRef();

	hr = reader->OpenStream(pStream);
	if(hr != S_OK)
	{
		LARGE_INTEGER dlibMove;
		ULARGE_INTEGER plibNewPosition;

		dlibMove.QuadPart = 30;
		plibNewPosition.QuadPart = 0;
		pAudioStream->Seek(dlibMove, FILE_BEGIN, &plibNewPosition);

		hr = reader->OpenStream(pStream);
		if(hr != S_OK)
		{
			reader->Release();
			reader = NULL;

			pStream->Release();
			pStream = NULL;
			CoUninitialize();

			return 0;
		}

		DWORD dwOutputCount;
		hr = reader->GetOutputCount(&dwOutputCount);
		if(hr != S_OK)
		{
			reader->Release();
			reader = NULL;

			pStream->Release();
			pStream = NULL;

			CoUninitialize();

			return 0;
		}

		printf("OutputCount=%d\n", dwOutputCount);
	}

	system("pause");
	
	reader->Release();
	reader = NULL;

	pStream->Release();
	pStream = NULL;

	CoUninitialize();

	return 0;
}


the code exit at IStream::OpenStream after IStream::Seek, what error occurred?
AnswerRe: what error occurren in this code? Pin
jackyxinli12-Nov-08 15:49
jackyxinli12-Nov-08 15:49 
QuestionCoCreateInstance Problem Pin
john563212-Nov-08 5:56
john563212-Nov-08 5:56 
AnswerRe: CoCreateInstance Problem Pin
jackyxinli12-Nov-08 17:56
jackyxinli12-Nov-08 17:56 
QuestionCOM(c++) event passing object as parameter c#.net? Pin
taiyang17-Nov-08 22:01
taiyang17-Nov-08 22:01 
AnswerRe: CoCreateInstance Problem Pin
Baltoro13-Nov-08 5:43
Baltoro13-Nov-08 5:43 
GeneralRe: CoCreateInstance Problem Pin
john563213-Nov-08 17:42
john563213-Nov-08 17:42 
QuestionHelp needed [ Problem in IDispatch::GetTypeInfo] Pin
mvkvibin11-Nov-08 19:13
mvkvibin11-Nov-08 19:13 
AnswerRe: Help needed [ Problem in IDispatch::GetTypeInfo] Pin
Vi213-Nov-08 1:38
Vi213-Nov-08 1:38 
GeneralRe: Help needed [ Problem in IDispatch::GetTypeInfo] Pin
mvkvibin13-Nov-08 22:14
mvkvibin13-Nov-08 22:14 
QuestionNeed to have a ClassFactory Pin
ShyamR11-Nov-08 18:44
ShyamR11-Nov-08 18:44 
QuestionReg:Output from Exe Method call Pin
swethasri11-Nov-08 18:13
swethasri11-Nov-08 18:13 
QuestionHow to retrieve document content or whole document on DocumentOpen Event Word Add-in Pin
PatilVijay9-Nov-08 19:49
PatilVijay9-Nov-08 19:49 
QuestionHow do you create and work a proxy used to Marshal an interface? (An IDropTarget to be precise) Pin
Code-o-mat9-Nov-08 11:11
Code-o-mat9-Nov-08 11:11 
QuestionError message "Overlapped I/O operation is in progress" Pin
Member 14340936-Nov-08 2:42
Member 14340936-Nov-08 2:42 
AnswerRe: Error message "Overlapped I/O operation is in progress" Pin
Randor 9-Nov-08 21:48
professional Randor 9-Nov-08 21:48 
QuestionSerial Port Simulation Pin
pierrecor5-Nov-08 21:40
pierrecor5-Nov-08 21:40 
AnswerRe: Serial Port Simulation Pin
Roger Stoltz5-Nov-08 22:05
Roger Stoltz5-Nov-08 22:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.