⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 primesvr.idl

📁 The source code samples for chapter 2, 4, 6, and 8 are contained in the EvenChapters project. Those
💻 IDL
字号:
// primesvr.idl : IDL source for primesvr.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (primesvr.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

	[
		object,
		uuid(E64EDDDF-2B2C-11D2-983C-00600823CFFB),
		helpstring("IEnumPrimes Interface"),
		pointer_default(unique)
	]
	interface IEnumPrimes : IUnknown
	{
    [local]
    HRESULT Next([in] ULONG celt,
                 [out] long* rgelt,
                 [out] ULONG *pceltFetched);

    [call_as(Next)]
    HRESULT RemoteNext([in] ULONG celt,
                       [out, size_is(celt),
                        length_is(*pceltFetched)] long* rgelt,
                       [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumPrimes **ppenum);
	};

	[
		object,
		uuid(E64EDE01-2B2C-11D2-983C-00600823CFFB),
		helpstring("IPrimeNumbers Interface"),
		pointer_default(unique)
	]
	interface IPrimeNumbers : IDispatch
	{
    HRESULT CalcPrimes([in] long min, [in] long max);
    
    [propget]
    HRESULT Count([out, retval] long* pnCount);

    [propget]
    HRESULT Item([in] long n, [out, retval] long* pnPrime);

    [propget]
    HRESULT Enum([out, retval] IEnumPrimes** ppEnum);
	};

[
	uuid(E64EDE02-2B2C-11D2-983C-00600823CFFB),
	version(1.0),
	helpstring("primesvr 1.0 Type Library")
]
library PRIMESVRLib
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

	[
		uuid(E64EDE03-2B2C-11D2-983C-00600823CFFB),
		helpstring("PrimeNumbers Class")
	]
	coclass PrimeNumbers
	{
		[default] interface IPrimeNumbers;
	};
};

// Implement local/call_as for IEnumPrimes
cpp_quote("#ifdef __midl_proxy")
cpp_quote("static HRESULT STDMETHODCALLTYPE")
cpp_quote("IEnumPrimes_Next_Proxy(IEnumPrimes* This, ULONG celt, long* rgelt, ULONG* pceltFetched)")
cpp_quote("{")
cpp_quote("  ULONG cFetched;")
cpp_quote("  if( !pceltFetched && celt != 1 ) return E_INVALIDARG;")
cpp_quote("  return IEnumPrimes_RemoteNext_Proxy(This, celt, rgelt, pceltFetched ? pceltFetched : &cFetched);")
cpp_quote("}")
cpp_quote("")
cpp_quote("static HRESULT STDMETHODCALLTYPE")
cpp_quote("IEnumPrimes_Next_Stub(IEnumPrimes* This, ULONG celt, long* rgelt, ULONG* pceltFetched)")
cpp_quote("{")
cpp_quote("  HRESULT hr = This->lpVtbl->Next(This, celt, rgelt, pceltFetched);")
cpp_quote("  if( hr == S_OK && celt == 1 ) *pceltFetched = 1;")
cpp_quote("  return hr;")
cpp_quote("}")
cpp_quote("#endif // __midl_proxy")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -