우선 header 파일이 없다면, 컴파일시 헤더파일이 없다는 오류가 발생합니다.
해당 파일은 존재하는데, 사용하는 빌더 버전이 낮아서,
IFrameworkInputPane 에 대한 정의가 되어 있지 않은것이 문제입니다.
해당 정의는 Windows 8.1 에서 생긴듯 한데, 빌더 버전을 높이는게 좋은 방법입니다.
굳이 예전버전을 사용해야 한다면,
shobjidl.h의 경우, windows sdk에 포함되어 있는 shobjidl.h 파일의 내용을 일부 발췌하여 사용하여야 합니다.
손이 좀 가는 작업일겁니다.
참고로, 엠바카데로 사이트에가면 community 버전을 등록하면 무료로 사용할 수 있습니다
제한적이지만 상업적 사용이 가능합니다.
친구 님이 쓰신 글 :
: 안녕하세요
: 빌더 6에서 아래 터치 키보드 관련 c++ 소스를 컴파일 하고 싶습니다.
:
: 컴파일 하면 Undefined symbol 'IFrameworkInputPane' 에러가 나고요
:
: #include "Shobjidl.h" 에 있어야 하는데 제 해더 파일엔 없더라고요
: 이런경우 어떻게 해결이 가능 할까요?
:
:
:
:
: #include "stdio.h"
: #include "Shobjidl.h"
: #include "Windows.h"
:
: bool GetKeyboardRect( RECT *r ) {
: IFrameworkInputPane *inputPane = NULL;
: bool result = false;
: HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
: if (SUCCEEDED(hr)) {
: hr = CoCreateInstance(CLSID_FrameworkInputPane, NULL, CLSCTX_INPROC_SERVER, IID_IFrameworkInputPane, (LPVOID*)&inputPane);
: if (SUCCEEDED(hr)) {
: hr=inputPane->Location( r );
: if (SUCCEEDED(hr)) {
: result = true;
:
: if( r->left == 0 )
: if( r->right == 0 )
: if( r->top == 0 )
: if( r->bottom == 0 )
: result = false;
: }
: inputPane->Release();
: }
: }
: CoUninitialize();
: return result;
: }
:
: int main()
: {
: HRESULT hr;
: hr = CoInitialize(0);
:
: RECT r;
: bool result = GetKeyboardRect( &r );
: printf( "result=%d RECT=%d,%d,%d,%d\n", result, r.left, r.top, r.right, r.left );
: return 0;
: }
: