다음을 통해 공유


OleCreateFromData 함수(ole2.h)

클립보드 또는 OLE 끌어서 놓기 작업의 일부로 검색된 데이터 전송 개체에서 포함된 개체를 만듭니다. OLE 끌어서 놓기 작업에서 붙여넣기를 구현하는 데 사용됩니다.

구문

HRESULT OleCreateFromData(
  [in]  LPDATAOBJECT    pSrcDataObj,
  [in]  REFIID          riid,
  [in]  DWORD           renderopt,
  [in]  LPFORMATETC     pFormatEtc,
  [in]  LPOLECLIENTSITE pClientSite,
  [in]  LPSTORAGE       pStg,
  [out] LPVOID          *ppvObj
);

매개 변수

[in] pSrcDataObj

개체가 만들어진 데이터를 보유하는 데이터 전송 개체의 IDataObject 인터페이스에 대한 포인터입니다.

[in] riid

호출자가 나중에 새 개체와 통신하는 데 사용하는 인터페이스의 식별자에 대한 참조입니다(일반적으로 IOleObject의 인터페이스 식별자로 OLE 헤더에 정의된 IID_IOleObject).

[in] renderopt

새로 만든 개체에 로컬로 캐시된 드로잉 또는 데이터 검색 기능을 나타내는 열거형 OLERENDER 의 값입니다. 추가 고려 사항은 다음 설명 섹션에 설명되어 있습니다.

[in] pFormatEtc

새로 만든 개체에 로컬로 캐시된 그리기 또는 데이터 검색 기능을 나타내는 열거형 OLERENDER 의 값에 대한 포인터입니다. 선택한 OLERENDER 값은 pFormatEtc 매개 변수의 가능한 값에 영향을 줍니다.

[in] pClientSite

개체가 컨테이너에서 서비스를 요청하는 기본 인터페이스인 IOleClientSite의 instance 대한 포인터입니다. 이 매개 변수는 NULL일 수 있습니다.

[in] pStg

스토리지 개체의 IStorage 인터페이스에 대한 포인터입니다. 이 매개 변수는 NULL이 아닐 수 있습니다.

[out] ppvObj

riid에서 요청된 인터페이스 포인터를 수신하는 포인터 변수의 주소입니다. 반환에 성공하면 *ppvObj 는 새로 만든 개체에 대해 요청된 인터페이스 포인터를 포함합니다.

반환 값

이 함수는 성공에 대한 S_OK 반환합니다. 다른 가능한 값은 다음과 같습니다.

반환 코드 설명
OLE_E_STATIC
OLE가 정적 개체만 만들 수 있음을 나타냅니다.
DV_E_FORMATETC
개체를 만드는 데 사용할 수 있는 형식은 없습니다.

설명

OleCreateFromData 함수는 IDataObject 인터페이스를 지원하는 데이터 전송 개체에서 포함된 개체를 만듭니다. 이 경우 데이터 개체는 OleGetClipboard 함수를 호출하여 클립보드에서 검색된 형식이거나 OLE 끌어서 놓기 작업의 일부입니다(데이터 개체는 IDropTarget::D rop 호출에 전달됨).

FileName 또는 FileNameW 클립보드 형식(CF_FILENAME)이 데이터 전송 개체에 있고 CF_EMBEDDEDOBJECT 또는 CF_EMBEDSOURCE 없는 경우 OleCreateFromData 는 먼저 표시된 파일이 포함된 패키지를 만들려고 시도합니다. 일반적으로 사용 가능한 첫 번째 형식을 사용합니다.

OleCreateFromData에서 패키지를 만들 수 없는 경우 CF_EMBEDDEDOBJECT 형식을 사용하여 개체를 만들려고 합니다. 해당 형식을 사용할 수 없는 경우 OleCreateFromData 는 CF_EMBEDSOURCE 형식으로 만듭니다. 이러한 형식 중 어느 것도 사용할 수 없으며 데이터 전송 개체가 IPersistStorage 인터페이스를 지원하는 경우 OleCreateFromData 는 개체의 IPersistStorage::Save 를 호출하여 개체 자체를 저장합니다.

기존 연결된 개체를 선택한 다음 복사하면 클립보드에 다른 포함 개체로 표시됩니다. 따라서 OleCreateFromData 를 호출하는 붙여넣기 작업은 연결된 개체를 만들 수 있습니다. 붙여넣기 작업 후에 컨테이너는 QueryInterface 함수를 호출하여 연결된 개체가 만들어졌는지 확인하기 위해 IID_IOleLink(OLE 헤더에 IOleLink의 인터페이스 식별자로 정의됨)를 요청해야 합니다.

renderoptpFormatetc 매개 변수를 사용하여 새로 만든 개체의 캐싱 기능을 제어합니다. 이러한 매개 변수의 상호 작용을 사용하여 캐시할 내용을 확인하는 방법에 대한 일반적인 내용은 OLERENDER 열거형을 참조하세요. 그러나 OleCreateFromData 가 캐시를 초기화하는 방식에는 이러한 매개 변수의 몇 가지 추가적인 특정 효과가 있습니다.

OleCreateFromData가 CF_EMBEDDEDOBJECT 또는 CF_EMBEDSOURCE 클립보드 형식을 사용하여 포함된 개체를 만드는 경우 두 개체 간의 기본 차이점은 캐시 초기화 데이터가 저장되는 위치입니다.

  • CF_EMBEDDEDOBJECT 원본이 기존 포함된 개체임을 나타냅니다. 이미 캐시에 적절한 데이터가 있으며 OLE는 이 데이터를 사용하여 새 개체의 캐시를 초기화합니다.
  • CF_EMBEDSOURCE 원본 데이터 개체에 캐시 초기화 정보가 CF_EMBEDSOURCE 이외의 형식으로 포함되어 있음을 나타냅니다. OleCreateFromData 는 이를 사용하여 새로 포함된 개체의 캐시를 초기화합니다.
renderopt 값은 다음과 같이 캐시 초기화에 영향을 줍니다.
Description
OLERENDER_DRAW & OLERENDER_FORMAT 캐시할 프레젠테이션 정보가 현재 적절한 캐시 초기화 풀에 있는 경우 이 정보가 사용됩니다. (적절한 위치는 CF_EMBEDDEDOBJECT 원본 데이터 개체 캐시에 있고 CF_EMBEDSOURCE 원본 데이터 개체의 다른 형식에 있습니다.) 정보가 없으면 캐시는 처음에 비어 있지만 개체가 처음 실행될 때 채워집니다. 새로 만든 개체에는 다른 형식이 캐시되지 않습니다.
OLERENDER_NONE 새로 만든 개체에 캐시할 항목이 없습니다. 원본에 CF_EMBEDDEDOBJECT 형식이 있는 경우 복사된 기존 캐시된 데이터가 제거됩니다.
OLERENDER_ASIS 원본에 CF_EMBEDDEDOBJECT 형식이 있는 경우 새 개체의 캐시는 원본 개체와 동일한 캐시 데이터를 포함하는 것입니다. CF_EMBEDSOURCE 경우 새로 만든 개체에 캐시할 항목이 없습니다. 이 옵션은 보다 정교한 컨테이너에서 사용해야 합니다. 이 호출 후 이러한 컨테이너는 IOleCache::CacheIOleCache::Uncache 를 호출하여 캐시할 항목을 정확히 설정합니다. CF_EMBEDSOURCE 경우 IOleCache::InitCache도 호출합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ole2.h
라이브러리 Ole32.lib
DLL Ole32.dll
API 세트 ext-ms-win-com-ole32-l1-1-3(Windows 10 버전 10.0.10240에 도입됨)

추가 정보

Idataobject

OleCreate