PK 6ptestDD/BuildLog.htm<html> <head> <META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-16"> </head> <body> <pre> <table width=100% bgcolor=#CFCFE5><tr> <td> <font face=arial size=+3> Build Log </font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre> <h3>Build started: Project: TestDD, Configuration: Debug|Win32</h3> </pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2> Command Lines </font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Creating temporary file "c:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\Debug\RSP00005737887616.rsp" with contents [ /Od /D &quot;WIN32&quot; /D &quot;_WINDOWS&quot; /D &quot;_DEBUG&quot; /D &quot;_CRT_SECURE_NO_DEPRECATE&quot; /D &quot;_VC80_UPGRADE=0x0700&quot; /D &quot;_AFXDLL&quot; /D &quot;_MBCS&quot; /Gm /EHsc /RTC1 /MDd /Yu&quot;stdafx.h&quot; /Fp&quot;Debug\TestDD.pch&quot; /Fo&quot;Debug\\&quot; /Fd&quot;Debug\vc80.pdb&quot; /W3 /c /Wp64 /ZI /TP &quot;.\ChildView.cpp&quot; ] Creating command line "cl.exe @"c:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\Debug\RSP00005737887616.rsp" /nologo /errorReport:prompt" </pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2> Output Window </font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Compiling... ChildView.cpp c:\documents and settings\zidanf\my documents\visual studio 2005\projects\insync\testdd\childview.cpp(1091) : warning C4309: '=' : truncation of constant value c:\documents and settings\zidanf\my documents\visual studio 2005\projects\insync\testdd\childview.cpp(1092) : warning C4309: '=' : truncation of constant value </pre></table><table width=100% bgcolor=#DFDFE5><tr><td><font face=arial size=+2> Results </font></table><table width=* cellspacing=0 cellpadding=0><tr><td width=0 bgcolor=#EDEDF5>&nbsp;</td><td width=0 bgcolor=#FFFFFF>&nbsp;</td><td width=*><pre>Build Time 0:00 Build log was saved at "file://c:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\Debug\BuildLog.htm" TestDD - 0 error(s), 2 warning(s) </pre></table><table width=100% height=20 bgcolor=#CFCFE5><tr><td><font face=arial size=+2> </font></table></body></html>PK 6testDD/ChildView.cpp// ChildView.cpp : implementation of the CChildView class // #include "stdafx.h" #include "TestDD.h" #include "ChildView.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() ON_COMMAND(ID_TEST_TESTPARAMETERBINDOFFSETSEQUENTIAL, OnTestTestparameterbindoffsetsequential) ON_UPDATE_COMMAND_UI(ID_TEST_TESTPARAMETERBINDOFFSETSEQUENTIAL, OnUpdateTestTestparameterbindoffsetsequential) ON_COMMAND(ID_TESTTABLETYPES, OnTesttabletypes) ON_UPDATE_COMMAND_UI(ID_TESTTABLETYPES, OnUpdateTesttabletypes) ON_WM_CREATE() ON_COMMAND(ID_TEST_TESTPARAMETERBINDOFFSETINSERT, OnTestTestparameterbindoffsetinsert) ON_UPDATE_COMMAND_UI(ID_TEST_TESTPARAMETERBINDOFFSETINSERT, OnUpdateTestTestparameterbindoffsetinsert) ON_COMMAND(ID_TEST_TESTWITHOUTPARAMETERBINDOFFSET, OnTestTestwithoutparameterbindoffset) ON_UPDATE_COMMAND_UI(ID_TEST_TESTWITHOUTPARAMETERBINDOFFSET, OnUpdateTestTestwithoutparameterbindoffset) ON_COMMAND(ID_TEST_TESTPARAMETERLONGERROR, OnTestTestparameterlongerror) ON_UPDATE_COMMAND_UI(ID_TEST_TESTPARAMETERLONGERROR, OnUpdateTestTestparameterlongerror) ON_COMMAND(ID_TEST_TESTPARAMETERLONGERRORNOBINDOFFSETPOINTER, OnTestTestparameterlongerrornobindoffsetpointer) ON_UPDATE_COMMAND_UI(ID_TEST_TESTPARAMETERLONGERRORNOBINDOFFSETPOINTER, OnUpdateTestTestparameterlongerrornobindoffsetpointer) ON_COMMAND(ID_TESTSQLTABLESWITHROWOFFSETPOINTER, OnTestSQLTablesWithRowoffsetpointer) ON_UPDATE_COMMAND_UI(ID_TESTSQLTABLESWITHROWOFFSETPOINTER, OnUpdateTestSQLTablesWithRowOffsetPointer) ON_COMMAND(ID_TEST_TESTSQLTABLESWITHOUTROWOFFSETPOINTER, OnTestSQLTablesWithoutrowoffsetpointer) ON_UPDATE_COMMAND_UI(ID_TEST_TESTSQLTABLESWITHOUTROWOFFSETPOINTER, OnUpdateTestSQLTtablesWithoutrowoffsetpointer) ON_COMMAND(ID_TEST_TESTSQLTABLEMULTI, OnTestTestsqltablemulti) ON_UPDATE_COMMAND_UI(ID_TEST_TESTSQLTABLEMULTI, OnUpdateTestTestsqltablemulti) ON_COMMAND(ID_TEST_RUNTEST, OnTestRuntest) ON_UPDATE_COMMAND_UI(ID_TEST_RUNTEST, OnUpdateTestRuntest) ON_COMMAND(ID_TEST_2, OnTest2) ON_UPDATE_COMMAND_UI(ID_TEST_2, OnUpdateTest2) END_MESSAGE_MAP() // CChildView message handlers BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast(COLOR_WINDOW+1), NULL); return TRUE; } void CChildView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CWnd::OnPaint() for painting messages } #define RC_SUCCESS(x) ((x) == SQL_SUCCESS || \ (x) == SQL_SUCCESS_WITH_INFO) RETCODE CChildView::DiagSQLError( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, const SQLRETURN rc, const char *ROUTINE, const char *szContext ) { SQLCHAR szSQLState[ 20 ]; UCHAR szMessageText[ 2000 + 1 ]; const char *szCaption = ""; SDWORD nNativeError; SWORD cb; if ( rc == SQL_SUCCESS ) return TRUE; szSQLState[0] = '\0'; szMessageText[0] = '\0'; SQLError( henv, hdbc, hstmt, szSQLState, &nNativeError, szMessageText, sizeof( szMessageText ), &cb ); CString sText; sText.Format( "SQLState: %s\n" "Native Error: %d\n%s", szSQLState, nNativeError, szMessageText ); //AfxMessageBox( sText, MB_OK, 0 ); MessageBox( sText, ROUTINE, MB_OK ); return SQL_SUCCESS; } SQLRETURN CChildView::Connect( SQLHENV &henv, SQLHDBC &hdbc, const char *szConnect ) { ASSERT( szConnect != NULL && *szConnect ); ASSERT( henv == NULL ); ASSERT( hdbc == NULL ); // connect to the database SQLRETURN rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ); if ( !RC_SUCCESS( rc ) ) return rc; // declare the odbc version to work with rc = SQLSetEnvAttr( henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER ) SQL_OV_ODBC3, NULL ); if ( !RC_SUCCESS( rc ) ) return rc; // allocate connection handle rc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ); if ( !RC_SUCCESS( rc ) ) return rc; // attempt connection SQLSMALLINT cbConnStrOut; //SQLINTEGER cbConnStrOut; const int cbConnStrOutMax = 1024; char szConnStrOut[ cbConnStrOutMax + 1 ]; rc = SQLDriverConnect( hdbc, AfxGetApp()->GetMainWnd()->GetSafeHwnd(), // hwnd, ( SQLCHAR * ) szConnect, ( SQLSMALLINT ) strlen( szConnect ), ( SQLCHAR * ) szConnStrOut, cbConnStrOutMax, &cbConnStrOut, SQL_DRIVER_COMPLETE /*SQL_DRIVER_NOPROMPT*/); if ( !RC_SUCCESS( rc ) ) { // done by caller //SQLFreeHandle( SQL_HANDLE_DBC, m_hdbc ); //SQLFreeHandle( SQL_HANDLE_ENV, m_henv ); return rc; } // connected return rc; } SQLRETURN CChildView::Disconnect( SQLHENV &henv, SQLHDBC &hdbc) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); SQLRETURN rc = SQLDisconnect( hdbc ); if ( !RC_SUCCESS( rc ) ) return rc; rc = SQLFreeHandle( SQL_HANDLE_DBC, hdbc ); hdbc = NULL; rc = SQLFreeHandle( SQL_HANDLE_ENV, henv ); henv = NULL; return rc; } void CChildView::OnTestTestparameterbindoffsetsequential() { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below const char *szConnect = "DSN=myodbcdatasourcename;UID=myuserid;PWD=mypassword"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( RC_SUCCESS( rc ) ) { // connected rc = TestBindOffset( henv, hdbc, hstmt ); } if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); } void CChildView::OnUpdateTestTestparameterbindoffsetsequential(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTesttabletypes() { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; m_lb.ResetContent(); // to do: substitute your database connection info below //ASSERT( FALSE ); const char *szConnect = "DSN=ants;UID=SYSTEM;PWD=SYSTEM"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( rc == SQL_SUCCESS_WITH_INFO ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); if ( RC_SUCCESS( rc ) ) { // connected DWORD cRow = 0; rc = TestSQLTables( henv, hdbc, "", // catalog "", // schema "", // table name SQL_ALL_TABLE_TYPES, cRow ); } if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); } void CChildView::TestSQLTables( const bool bParamBindOffset ) { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below //ASSERT( FALSE ); const char *szConnect = "DSN=RDMServer;UID=admin;PWD=secret"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( rc == SQL_SUCCESS_WITH_INFO ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); else if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); return; } rc = SetAutoCommit( hdbc, false ); if ( !RC_SUCCESS( rc ) ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); if ( RC_SUCCESS( rc ) ) { // connected const size_t cRepeat = 20; for ( size_t i = 0; i < cRepeat; ++i ) { DWORD cRow = 0; rc = TestSQLTables( henv, hdbc, "", // catalog "", // schema "", // table name "", // table types, cRow, bParamBindOffset ); if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); break; } } } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); } void CChildView::TestSQLTablesMT() { const TCHAR *ROUTINE = _T("TestSQLTablesMT"); SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below const char *szConnect = "DSN=sqlite3"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( rc == SQL_SUCCESS_WITH_INFO ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); else if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); return; } rc = SetAutoCommit( hdbc, false ); if ( !RC_SUCCESS( rc ) ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); // maximum number of active statements on a connection SQLUSMALLINT nMaxConcurrentActivities; rc = SQLGetInfo( hdbc, SQL_MAX_CONCURRENT_ACTIVITIES, &nMaxConcurrentActivities, NULL, NULL ); if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } // no limit ASSERT( nMaxConcurrentActivities == 0 ); SQLUINTEGER nSQLAttrTxnIsolation; rc = SQLGetConnectAttr( hdbc, SQL_ATTR_TXN_ISOLATION, &nSQLAttrTxnIsolation, SQL_IS_POINTER, NULL ); //const size_t COUNT_THREAD = 1; const size_t COUNT_THREAD = 64; CWinThread *pAThread[COUNT_THREAD]; ASSERT( COUNT_THREAD <= MAXIMUM_WAIT_OBJECTS ); for ( size_t i = 0; i < COUNT_THREAD; ++i ) { pAThread[i] = NULL; } if ( RC_SUCCESS( rc ) ) { // connected TEST_MT param; param.henv = henv; param.hdbc = hdbc; param.pView = this; for ( UINT i = 0; i < COUNT_THREAD; ++i ) { pAThread[i] = new CWinThread( TestSQLAllocStmtMTProc, ( LPVOID ) ¶m ); ASSERT( pAThread[i] != NULL ); if ( !CreateThreadSuspend( pAThread[i], false ) ) { AfxMessageBox( "Failed to create sort worker thread", MB_OK, 0 ); break; } } vector< HANDLE > vHandle; for ( size_t i = 0; i < COUNT_THREAD; ++i ) { pAThread[i]->ResumeThread(); vHandle.push_back( pAThread[i]->m_hThread ); } DWORD dwResult = WaitForMultipleObjects( (DWORD) vHandle.size(), &vHandle[0], TRUE, INFINITE ); if ( dwResult == WAIT_FAILED ) { GetLastError( "WaitForMultipleObjects", ROUTINE ); } for ( size_t i = 0; i < COUNT_THREAD; ++i ) { if ( pAThread[i] != NULL ) delete pAThread[i]; } } //if ( !RC_SUCCESS( rc ) ) { // DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); //} if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); MessageBox( "Test Success", ROUTINE, MB_OK ); } void CChildView::OnUpdateTesttabletypes(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } SQLRETURN CChildView::TestBindOffset( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); ASSERT( hstmt != NULL ); const UINT ROW_COUNT = 500; vector< BUF > vRow( ROW_COUNT ); // our row buffer // additonal test that fails is when buffer gets moved on reallocations and // the parameter is not rebound // as long as the result of adding the bound buffer parameter address and // offset pointer is valid the bound parameter buffer value and indicator // references can be invalid // get a the first row of the buffer so we can use it to bind the parameter BUF *pBaseRow = &vRow[0]; // parameter bind offset SQLUINTEGER m_nParamBindOffset = 0; const char *szSQL = "select 1 where 'Testing' = ? "; SQLRETURN rc = SQLAllocStmt( hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; // bind the parameter rc = ::SQLBindParameter( hstmt, 1, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_VARCHAR, // ParameterType, sizeof( pBaseRow->description), // cbColumnSize 0, // DecimalDigits pBaseRow->description, // pBuffer, sizeof( pBaseRow->description ), // nBufferLength, &pBaseRow->descriptionIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // enable param binding offsets use rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_PARAM_BIND_OFFSET_PTR, &m_nParamBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) return rc; // if you execute the statement sequentially from the start of the buffer // then no crash later when executing the statement on a row in the middle // or end of the buffer //// execute the statement sequentially //for ( UINT nRow = 0; nRow < vRow.size(); ++nRow ) { // BUF *pRow = &vRow[nRow]; // m_nParamBindOffset = ( SQLUINTEGER ) // ( (intptr_t ) pRow - (intptr_t ) pBaseRow ); // rc = SQLExecDirect( m_hstmt, // (SQLCHAR *) szSQL, // ( SQLINTEGER ) strlen( szSQL ) ); // ASSERT( RC_SUCCESS( rc ) ); // if ( RC_SUCCESS( rc ) ) { // rc = ::SQLFetch( m_hstmt ); // ASSERT( rc == SQL_NO_DATA_FOUND ); // // done with the resultset, close it // if ( rc == SQL_NO_DATA_FOUND ) // rc = ::SQLFreeStmt( m_hstmt, SQL_CLOSE ); // } //} // execute statement in middle of buffer or at or just before the end WITHOUT // first executing the statement sequentially on all the buffer rows starting // from the begining of buffer results in driver CRASH UINT nRow2 = 450; ASSERT( nRow2 < vRow.size() ); BUF *pRow = &vRow[nRow2]; m_nParamBindOffset = ( SQLUINTEGER ) ( (intptr_t ) pRow - (intptr_t ) pBaseRow ); rc = SQLExecDirect( hstmt, (SQLCHAR *) szSQL, ( SQLINTEGER ) strlen( szSQL ) ); ASSERT( RC_SUCCESS( rc ) ); if ( RC_SUCCESS( rc ) ) { rc = ::SQLFetch( hstmt ); ASSERT( rc == SQL_NO_DATA_FOUND ); // done with the resultset, close it if ( rc == SQL_NO_DATA_FOUND ) rc = ::SQLFreeStmt( hstmt, SQL_CLOSE ); } ::SQLFreeStmt( hstmt, SQL_DROP ); hstmt = NULL; // disconnect done by caller return SQL_SUCCESS; } SQLRETURN CChildView::TestBindParamOffsetPtrInsert( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); ASSERT( hstmt == NULL ); const UINT ROW_COUNT = 500; vector< BUF > vRow( ROW_COUNT ); // our row buffer // get a the first row of the buffer so we can use it to bind the parameter BUF *pBaseRow = &vRow[0]; // parameter bind offset SQLUINTEGER m_nParamBindOffset = 0; // table ddl /* CREATE TABLE "test_param_offset"( "num" INTEGER NOT NULL , "description" CHAR(100) CASE ); CREATE INDEX "PK_TEST_PARAM_OFFSET" ON "test_param_offset"("num"); */ const char *szSQL = "insert into test_param_offset values ( ?, ? )"; SQLRETURN rc = SQLAllocStmt( hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; // bind the parameter rc = ::SQLBindParameter( hstmt, 1, // one-based SQL_PARAM_INPUT, SQL_C_LONG, // nValueType, SQL_INTEGER, // ParameterType, sizeof( pBaseRow->num), // cbColumnSize 0, // DecimalDigits &pBaseRow->num, // pBuffer, sizeof( pBaseRow->num ), // nBufferLength, &pBaseRow->numIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // bind the parameter rc = ::SQLBindParameter( hstmt, 2, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_VARCHAR, // ParameterType, sizeof( pBaseRow->description), // cbColumnSize 0, // DecimalDigits pBaseRow->description, // pBuffer, sizeof( pBaseRow->description ), // nBufferLength, &pBaseRow->descriptionIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // enable param binding offsets use rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_PARAM_BIND_OFFSET_PTR, &m_nParamBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) return rc; // execute the statement sequentially for ( UINT nRow = 0; nRow < vRow.size(); ++nRow ) { BUF *pRow = &vRow[nRow]; pRow->num = nRow; pRow->numIND = sizeof( pRow->num ); m_nParamBindOffset = ( SQLUINTEGER ) ( (intptr_t ) pRow - (intptr_t ) pBaseRow ); rc = SQLExecDirect( hstmt, (SQLCHAR *) szSQL, ( SQLINTEGER ) strlen( szSQL ) ); ASSERT( RC_SUCCESS( rc ) ); if ( !RC_SUCCESS( rc ) ) break; } ::SQLFreeStmt( hstmt, SQL_DROP ); hstmt = NULL; // disconnect done by caller return rc; } SQLRETURN CChildView::TestBindParamOffsetPtrInsert2( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, const bool bBindOffset ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); ASSERT( hstmt == NULL ); const UINT ROW_COUNT = 500; vector< BUF2 > vRow( ROW_COUNT ); // our row buffer // get a the first row of the buffer so we can use it to bind the parameter BUF2 *pBaseRow = &vRow[0]; // parameter bind offset SQLUINTEGER m_nParamBindOffset = 0; // table ddl /* CREATE TABLE test_bind_param ( drg CHAR(3) NOT NULL, description VARCHAR(50), drg_weight DECIMAL(6,2), runid INTEGER ); CREATE TABLE test_no_bind_param ( drg CHAR(3) NOT NULL, description VARCHAR(50), drg_weight DECIMAL(6,2), runid INTEGER ); */ const char *szSQL = bBindOffset ? "insert into test_bind_param ( drg, description, drg_weight ) values ( ?, ?, ? )" : "insert into test_no_bind_param ( drg, description, drg_weight ) values ( ?, ?, ? )"; SQLRETURN rc = SQLAllocStmt( hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; // bind the parameter rc = ::SQLBindParameter( hstmt, 1, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_CHAR, // ParameterType, 3, // cbColumnSize 0, // DecimalDigits pBaseRow->drg, // pBuffer, 4, // nBufferLength, &pBaseRow->drgIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // bind the parameter rc = ::SQLBindParameter( hstmt, 2, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_VARCHAR, // ParameterType, 50, // cbColumnSize 0, // DecimalDigits pBaseRow->description, // pBuffer, 71, // nBufferLength, &pBaseRow->descriptionIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // bind the parameter rc = ::SQLBindParameter( hstmt, 3, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_DECIMAL, // ParameterType, 6, // cbColumnSize 2, // DecimalDigits pBaseRow->drg_weight, // pBuffer, 13, // nBufferLength, &pBaseRow->drg_weightIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; if ( bBindOffset ) { // enable param binding offsets use rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_PARAM_BIND_OFFSET_PTR, &m_nParamBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) return rc; } for ( UINT nRow = 0; nRow < vRow.size(); ++nRow ) { BUF2 *pRow = bBindOffset ? &vRow[nRow] : &vRow[0]; _ltoa( nRow, pRow->drg, 10 ); pRow->drgIND = (long) strlen( pRow->drg ); _ltoa( nRow + 1000, pRow->description, 10 ); pRow->descriptionIND = (long) strlen( pRow->description ); CString sDrgWeight; sDrgWeight.Format("%d.25", nRow ); strcpy( pRow->drg_weight, sDrgWeight ); pRow->drg_weightIND = (long) strlen( pRow->drg_weight ); if ( bBindOffset ) { m_nParamBindOffset = ( SQLUINTEGER ) ( (intptr_t ) pRow - (intptr_t ) pBaseRow ); } rc = SQLExecDirect( hstmt, (SQLCHAR *) szSQL, ( SQLINTEGER ) strlen( szSQL ) ); ASSERT( RC_SUCCESS( rc ) ); if ( !RC_SUCCESS( rc ) ) break; } // disconnect done by caller return rc; } SQLRETURN CChildView::TestBindParamOffsetPtrInsert3( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, const bool bBindOffset ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); ASSERT( hstmt == NULL ); //ASSERT( bBindOffset ); SQLRETURN rc = SQL_SUCCESS; // base row for binding //BUF3 row; //BUF3 *pBaseRow = &vRow[0]; BUF3 *pRowBind = ( BUF3 * ) malloc( sizeof( BUF3 ) ); //BUF3 *pRowBind = 0; ASSERT( pRowBind != NULL ); const UINT ROW_COUNT = 100; const UINT ROW_ALLOC = 10000; //vector< BUF3 > vRow( ROW_COUNT ); // our row buffer char *pArray = ( char * ) GlobalAllocPtr( GHND, sizeof( BUF3 ) * ROW_ALLOC ); ASSERT( pArray != NULL ); // table ddl /* CREATE TABLE test_param_data ( mpcno CHAR(2) NOT NULL, mpcdesc VARCHAR(100) ); */ const UINT ROW_START = 9000; ASSERT( ROW_START < ROW_ALLOC ); ASSERT( ROW_START + ROW_COUNT < ROW_ALLOC ); const char *szSQL = bBindOffset ? "insert into test_param_data ( mpcno, mpcdesc ) values ( ?, ? )" : "insert into test_param_data ( mpcno, mpcdesc ) values ( ?, ? )"; rc = SQLAllocStmt( hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) goto ExitTest3; // parameter bind offset SQLUINTEGER m_nParamBindOffset = 0; if ( bBindOffset ) { // enable param binding offsets use rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_PARAM_BIND_OFFSET_PTR, &m_nParamBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) goto ExitTest3; } // bind the parameter rc = ::SQLBindParameter( hstmt, 1, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_CHAR, // ParameterType, 2, // cbColumnSize 0, // DecimalDigits pRowBind->mpcno, // pBuffer, sizeof(pRowBind->mpcno), // nBufferLength, &pRowBind->mpcnoIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) goto ExitTest3; // bind the parameter rc = ::SQLBindParameter( hstmt, 2, // one-based SQL_PARAM_INPUT, SQL_C_CHAR, // nValueType, SQL_VARCHAR, // ParameterType, MPCDESC_SZ, // cbColumnSize 0, // DecimalDigits pRowBind->mpcdesc, // pBuffer, sizeof(pRowBind->mpcdesc), // nBufferLength, &pRowBind->mpcdescIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) goto ExitTest3; for ( UINT nRow = 1; nRow < ROW_COUNT; ++nRow ) { //BUF3 *pRow = bBindOffset ? &vRow[nRow] : &vRow[0]; BUF3 *pRow = bBindOffset ? ( ( BUF3 * ) ( pArray + ( ROW_START + nRow ) * sizeof( BUF3 ) ) ) : pRowBind; CString sText; sText.Format( "%02d", nRow + 1 ); strncpy( pRow->mpcno, sText, MPCNO_SZ ); pRow->mpcno[ MPCNO_SZ ] = '\0'; pRow->mpcnoIND = (long) strlen( pRow->mpcno ); ASSERT( pRow->mpcnoIND <= MPCNO_SZ ); const char *MPCDESC = ( nRow + 1 ) % 2 ? "INFECTIOUS DISEASES" : "ENDOCRINOLOGY"; strcpy( pRow->mpcdesc, MPCDESC ); pRow->mpcdescIND = (long) strlen( pRow->mpcdesc ); ASSERT( pRow->mpcdescIND <= MPCDESC_SZ ); if ( bBindOffset ) { m_nParamBindOffset = ( SQLUINTEGER ) ( (intptr_t ) pRow - (intptr_t ) pRowBind ); } rc = SQLExecDirect( hstmt, (SQLCHAR *) szSQL, ( SQLINTEGER ) strlen( szSQL ) ); ASSERT( RC_SUCCESS( rc ) ); if ( !RC_SUCCESS( rc ) ) break; } // disconnect done by caller ExitTest3: if ( pRowBind != NULL ) free( pRowBind ); if ( pArray != NULL ) GlobalFreePtr( pArray ); return rc; } SQLRETURN CChildView::TestUpdateTimeStamp( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, const bool bBindOffset ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); ASSERT( hstmt == NULL ); const DWORD ROW_MAX = 10000; vector vRow(ROW_MAX); // our row buffer // get a the first row of the buffer so we can use it to bind the parameter ROUTE *pBaseRow = &vRow[9000]; // parameter bind offset SQLUINTEGER m_nParamBindOffset = 0; const char *szSQL = "update route set rt_arrive_at = ? where rt_id = ?"; SQLRETURN rc = SQLAllocStmt( hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; // rt_arrive_at rc = ::SQLBindParameter( hstmt, 1, // one-based SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, // nValueType 93 SQL_TYPE_TIMESTAMP, // ParameterType 93 19, // cbColumnSize 0, // DecimalDigits &pBaseRow->rt_arrive_at, // pBuffer, 16, // nBufferLength, &pBaseRow->rt_arrive_atIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // rt_id rc = ::SQLBindParameter( hstmt, 2, // one-based SQL_PARAM_INPUT, SQL_C_SLONG, // nValueType, SQL_INTEGER, // ParameterType, 4, // cbColumnSize 24, // DecimalDigits &pBaseRow->rt_id, // pBuffer, sizeof(pBaseRow->rt_id), // nBufferLength, &pBaseRow->rt_idIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; if ( bBindOffset ) { // enable param binding offsets use rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_PARAM_BIND_OFFSET_PTR, &m_nParamBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) return rc; } const DWORD nRow = 100; ROUTE *pRow = bBindOffset ? &vRow[nRow] : &vRow[0]; pRow->rt_idIND = 4; pRow->rt_id = 4670; // 2006-10-11 12:33:00.000 pRow->rt_arrive_atIND = sizeof( pRow->rt_arrive_at ); pRow->rt_arrive_at.year = 2006; pRow->rt_arrive_at.month = 10; pRow->rt_arrive_at.day = 11; pRow->rt_arrive_at.hour = 12; pRow->rt_arrive_at.minute = 33; pRow->rt_arrive_at.second = 0; pRow->rt_arrive_at.fraction = 0; pRow->junk[0] = 0xff; pRow->junk[1] = 0xee; if ( bBindOffset ) { m_nParamBindOffset = ( SQLUINTEGER ) ( (intptr_t ) pRow - (intptr_t ) pBaseRow ); } rc = SQLExecDirect( hstmt, (SQLCHAR *) szSQL, ( SQLINTEGER ) strlen( szSQL ) ); if ( RC_SUCCESS( rc ) ) { rc = SQLEndTran( SQL_HANDLE_DBC, hdbc, SQL_COMMIT ); } //ASSERT( RC_SUCCESS( rc ) ); // disconnect done by caller return rc; } void CChildView::TestUpdateTimeStamp( const bool bBindOffset ) { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below //const char *szConnect = "DSN=demodb;UID=SYSTEM;PWD=SYSTEM"; const char *szConnect = "DSN=demodb"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( RC_SUCCESS( rc ) ) { rc = SetAutoCommit( hdbc, false ); } if ( RC_SUCCESS( rc ) ) { // connected rc = TestUpdateTimeStamp( henv, hdbc, hstmt, bBindOffset ); } if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); } SQLRETURN CChildView::TestSQLTables( SQLHENV &henv, SQLHDBC &hdbc, const char *szTableCat, const char *szTableSchem, const char *szTableName, const char *szTableType, DWORD &cRow, const bool bRowBindOffset ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); //ASSERT( hstmt != NULL ); SQLHSTMT hstmt = NULL; const bool bUI = false; if ( bUI ) { m_lb.ResetContent(); } cRow = 0; // get a the first row of the buffer so we can use it to bind the parameter BUF rowbase; //BUF *pRowBind = &m_baseRow; BUF *pRowBind = &rowbase; vector< BUF > vRow; // row bind offset SQLUINTEGER nRowBindOffset = 0; SQLRETURN rc = ::SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; //SQLHSTMT hstmt1 = NULL; //rc = SQLAllocStmt( hdbc, &hstmt1 ); //if ( !RC_SUCCESS( rc ) ) // return rc; // const char *szSQL = //"select 1 from sys.users where name = user \ //union all \ //select 2 from sys.users where name = user order by 1"; // // rc = SQLExecDirect( hstmt1, ( SQLCHAR * ) szSQL, strlen( szSQL ) ); // // if ( !RC_SUCCESS( rc ) ) // DiagSQLError( henv, hdbc, hstmt1, rc, "order by 1" ); // // if ( hstmt1 != NULL ) { // // ::SQLFreeStmt( hstmt1, SQL_DROP ); // hstmt1 = NULL; // } // bind the resultset rc = ::SQLBindCol( hstmt, 1, // table cat SQL_C_CHAR, // TargetType, pRowBind->table_cat, // TargetValue, sizeof( pRowBind->table_cat), // BufferLength &pRowBind->table_catIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 2, // table schem SQL_C_CHAR, // TargetType, pRowBind->table_schem, // TargetValue, sizeof( pRowBind->table_schem), // BufferLength &pRowBind->table_schemIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 3, // table name SQL_C_CHAR, // TargetType, pRowBind->table_name, // TargetValue, sizeof( pRowBind->table_name), // BufferLength &pRowBind->table_nameIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 4, // table type SQL_C_CHAR, // TargetType, pRowBind->table_type, // TargetValue, sizeof( pRowBind->table_type), // BufferLength &pRowBind->table_typeIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // enable row binding offsets use if ( bRowBindOffset ) { rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_ROW_BIND_OFFSET_PTR, &nRowBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) return rc; } size_t cbTableCat = szTableCat == NULL ? 0 : strlen( szTableCat ); size_t cbTableSchem = szTableSchem == NULL ? 0 : strlen( szTableSchem ); size_t cbTableName = szTableName == NULL ? 0 : strlen( szTableName ); size_t cbTableType = szTableType == NULL ? 0 : strlen( szTableType ); rc = ::SQLTables( hstmt, ( SQLCHAR * ) szTableCat, ( SQLSMALLINT ) cbTableCat, ( SQLCHAR * ) szTableSchem, ( SQLSMALLINT ) cbTableSchem, ( SQLCHAR * ) szTableName, ( SQLSMALLINT ) cbTableName, ( SQLCHAR * ) szTableType, ( SQLSMALLINT ) cbTableType ); if ( !RC_SUCCESS ( rc ) ) return rc; //SQLUSMALLINT nCol = 3; // table_name //SQLINTEGER nBufferLength = 0; //// describe buffer length //rc = SQLColAttribute( hstmt, // nCol, // SQL_DESC_OCTET_LENGTH, // NULL, // 0, // NULL, // &nBufferLength ); //if ( !RC_SUCCESS( rc ) ) { // DiagSQLError( henv, hdbc, hstmt, rc, "SQLColAttribute SQL_DESC_OCTET_LENGTH" ); //} //CString sText; //sText.Format( " --- Table Name buffer size: %d ---", nBufferLength ); // //m_lb.AddString( sText ); //// num prec radix //SQLPOINTER nNumPrecRadix = 0; //rc = SQLColAttribute( hstmt, // nCol, // SQL_DESC_NUM_PREC_RADIX, // NULL, // 0, // NULL, // &nNumPrecRadix ); //if ( !RC_SUCCESS( rc ) ) { // DiagSQLError( henv, hdbc, hstmt, rc, // "SQLColAttribute SQL_DESC_NUM_PREC_RADIX" ); //} rc = FetchRows( hstmt, cRow, pRowBind, nRowBindOffset, vRow, bRowBindOffset ); if ( bUI ) { for ( UINT nRow = 0; nRow < vRow.size(); ++nRow ) { const BUF &row = vRow[nRow]; if ( szTableType == SQL_ALL_TABLE_TYPES ) { m_lb.AddString( row.table_type ); } else { CString sText; if ( row.table_catIND != SQL_NULL_DATA ) sText = row.table_cat; sText += " - "; if ( row.table_schemIND != SQL_NULL_DATA ) sText += row.table_schem; sText += " - "; if ( row.table_nameIND != SQL_NULL_DATA ) sText += row.table_name; sText += " - "; if ( row.table_typeIND != SQL_NULL_DATA ) sText += row.table_type; m_lb.AddString( sText ); } } } if ( hstmt != NULL ) { ::SQLFreeStmt( hstmt, SQL_DROP ); hstmt = NULL; } return SQL_SUCCESS; } template< typename T > SQLRETURN CChildView::FetchRows( SQLHSTMT &hstmt, DWORD &cFetched, T *pRowBind, SQLUINTEGER &nRowBindOffset, vector< T > &vRow, const bool bRowBindOffset ) { SQLRETURN rc; cFetched = 0; // number of rows fetched in this call vRow.clear(); while ( 1 ) { T buf; vRow.push_back( buf ); T *pRow = &vRow.back(); // uses bind offsets nRowBindOffset = ( SQLUINTEGER ) ( (intptr_t ) pRow - (intptr_t ) pRowBind ); rc = FetchNextRow( hstmt ); if ( rc == SQL_NO_DATA_FOUND ) break; if ( !RC_SUCCESS ( rc ) ) { // done with resultset close it ::SQLFreeStmt( hstmt, SQL_CLOSE ); hstmt = NULL; break; } if ( !bRowBindOffset ) memcpy( pRow, pRowBind, sizeof( T ) ); ++cFetched; } // remove the last row ASSERT( vRow.size() > 0 ); vRow.erase( vRow.begin() + vRow.size() - 1 ); return rc == SQL_NO_DATA_FOUND && vRow.size() > 0 ? SQL_SUCCESS : rc; } SQLRETURN CChildView::SetAutoCommit( SQLHDBC hdbc, const bool bAutoCommit ) { RETCODE rc = SQLSetConnectAttr( hdbc, SQL_AUTOCOMMIT, bAutoCommit ? (SQLPOINTER ) SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF, SQL_IS_UINTEGER ); if ( bAutoCommit ) { rc = SQLEndTran( SQL_HANDLE_DBC, hdbc, SQL_COMMIT ); } return rc; } SQLRETURN CChildView::FetchNextRow( HSTMT &hstmt ) { SQLRETURN rc = ::SQLFetch( hstmt ); if ( RC_SUCCESS (rc) ) { if ( rc == SQL_SUCCESS_WITH_INFO ) { ASSERT( FALSE ); } return rc; } else if ( rc == SQL_NO_DATA_FOUND ) { // done with the statement, close it rc = ::SQLFreeStmt( hstmt, SQL_CLOSE ); hstmt = NULL; if ( !RC_SUCCESS( rc ) ) { ASSERT( FALSE ); } return SQL_NO_DATA_FOUND; } return rc; } int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; m_lb.Create( WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP |WS_BORDER, CRect( 10, 10, 500, 500 ), this, 0 ); return 0; } void CChildView::Testparameterbindoffsetinsert( const bool bBindOffset, const UINT nTest ) { ASSERT( nTest >= 2 && nTest <= 3 ); SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below const char *szConnect = "DSN=ants;UID=SYSTEM;PWD=SYSTEM"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( RC_SUCCESS( rc ) ) { // connected if ( nTest == 2 ) rc = TestBindParamOffsetPtrInsert2( henv, hdbc, hstmt, bBindOffset ); else if ( nTest == 3 ) rc = TestBindParamOffsetPtrInsert3( henv, hdbc, hstmt, bBindOffset ); else { ASSERT( FALSE ); } } if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); } void CChildView::OnTestTestparameterbindoffsetinsert() { Testparameterbindoffsetinsert( true, 2 ); } void CChildView::OnUpdateTestTestparameterbindoffsetinsert(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTestTestwithoutparameterbindoffset() { Testparameterbindoffsetinsert( false, 2 ); } void CChildView::OnUpdateTestTestwithoutparameterbindoffset(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTestTestparameterlongerror(){ Testparameterbindoffsetinsert( true, 3 ); } void CChildView::OnUpdateTestTestparameterlongerror(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTestTestparameterlongerrornobindoffsetpointer() { Testparameterbindoffsetinsert( false, 3 ); } void CChildView::OnUpdateTestTestparameterlongerrornobindoffsetpointer(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTestSQLTablesWithRowoffsetpointer() { TestSQLTables( true ); } void CChildView::OnUpdateTestSQLTablesWithRowOffsetPointer(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTestSQLTablesWithoutrowoffsetpointer() { TestSQLTables( false ); } void CChildView::OnUpdateTestSQLTtablesWithoutrowoffsetpointer(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } /////////////////////////////////////////////////////////////////////////////// // // Class: CChildView // // Method: CreateThreadSuspend // // Scope: protected // // Arguments: pThread // bAutoDelete // nPriority // nStackSize // dwCreateFlags // lpSecurityAttrs // // Returns: BOOL // // Description: // Create a suspended thread for the given parameters // /////////////////////////////////////////////////////////////////////////////// BOOL CChildView::CreateThreadSuspend( CWinThread *pThread, const bool bAutoDelete, int nPriority, UINT nStackSize, DWORD dwCreateFlags, LPSECURITY_ATTRIBUTES lpSecurityAttrs ) { ASSERT_VALID(pThread); if ( !pThread->CreateThread( dwCreateFlags | CREATE_SUSPENDED, nStackSize, lpSecurityAttrs ) ) { return FALSE; } VERIFY(pThread->SetThreadPriority(nPriority)); // whether to delete the created CWinThread object on termination pThread->m_bAutoDelete = bAutoDelete; //if ( !( dwCreateFlags & CREATE_SUSPENDED ) ) // VERIFY(pThread->ResumeThread() != (DWORD)-1); return TRUE; } UINT CChildView::TestSQLTablesMTProc( LPVOID param ) { TEST_MT *pParam = reinterpret_cast< TEST_MT * > ( param ); DWORD cRow = 0; pParam->pView->TestSQLTables( pParam->henv, pParam->hdbc, "", // catalog "", // schema "", // table name "", // table types, cRow, true /*bParamBindOffset*/ ); return 0; } UINT CChildView::TestSQLAllocStmtMTProc( LPVOID param ) { TEST_MT *pParam = reinterpret_cast< TEST_MT * > ( param ); DWORD cRow = 0; pParam->pView->TestSQLAllocStmt( pParam->henv, pParam->hdbc ); return 0; } void CChildView::OnTestTestsqltablemulti() { TestSQLTablesMT(); } void CChildView::OnUpdateTestTestsqltablemulti(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::TestGarbledCharData( const bool bParamBindOffset ) { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below //ASSERT( FALSE ); const char *szConnect = "DSN=PostgreSQL30W;UID=;PWD="; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( rc == SQL_SUCCESS_WITH_INFO ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); rc = SetAutoCommit( hdbc, false ); if ( !RC_SUCCESS( rc ) ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); if ( RC_SUCCESS( rc ) ) { // connected DWORD cRow = 0; rc = TestGarbledCharData( henv, hdbc, cRow, bParamBindOffset ); } if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); } SQLRETURN CChildView::TestGarbledCharData( SQLHENV &henv, SQLHDBC &hdbc, DWORD &cRow, const bool bRowBindOffset ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); //ASSERT( hstmt != NULL ); SQLHSTMT hstmt = NULL; const bool bUI = true; if ( bUI ) { m_lb.ResetContent(); } cRow = 0; // get a the first row of the buffer so we can use it to bind the parameter BUF4 rowbase; //BUF4 *pRowBind = &m_baseRow; BUF4 *pRowBind = &rowbase; vector< BUF4 > vRow; // row bind offset SQLUINTEGER nRowBindOffset = 0; SQLRETURN rc = SQLAllocStmt( hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; // bind the resultset rc = ::SQLBindCol( hstmt, 1, // cmp_type_cd SQL_C_CHAR, // TargetType, pRowBind->cmp_type_cd, // TargetValue, sizeof( pRowBind->cmp_type_cd), // BufferLength &pRowBind->cmp_type_cdIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 2, // description SQL_C_CHAR, // TargetType, pRowBind->description, // TargetValue, sizeof( pRowBind->description), // BufferLength &pRowBind->descriptionIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 3, // ctrl_ins_dtm SQL_C_TYPE_TIMESTAMP, // TargetType, &pRowBind->ctrl_ins_dtm, // TargetValue, sizeof( pRowBind->ctrl_ins_dtm), // BufferLength &pRowBind->ctrl_ins_dtmIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 4, // ctrl_upd_dtm SQL_C_TYPE_TIMESTAMP, // TargetType, &pRowBind->ctrl_upd_dtm, // TargetValue, sizeof( pRowBind->ctrl_upd_dtm), // BufferLength &pRowBind->ctrl_upd_dtmIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; rc = ::SQLBindCol( hstmt, 5, // ctrl_usr_id SQL_C_CHAR, // TargetType, pRowBind->ctrl_usr_id, // TargetValue, sizeof( pRowBind->ctrl_usr_id), // BufferLength &pRowBind->ctrl_usr_idIND ); // StrLen_or_IndPtr if ( !RC_SUCCESS( rc ) ) return rc; // enable row binding offsets use if ( bRowBindOffset ) { rc = ::SQLSetStmtAttr( hstmt, SQL_ATTR_ROW_BIND_OFFSET_PTR, &nRowBindOffset, SQL_IS_POINTER ); if ( !RC_SUCCESS( rc ) ) return rc; } /* create table in_sync_cmp_type ( cmp_type_cd CHAR(8) not null, description VARCHAR(30) not null, ctrl_ins_dtm TIMESTAMP not null default CURRENT_TIMESTAMP, ctrl_upd_dtm TIMESTAMP not null, ctrl_usr_id VARCHAR(128) not null, constraint PK_IN_SYNC_CMP_TYPE primary key (cmp_type_cd) ); -- sample data INSERT INTO in_sync_cmp_type VALUES ( 'DATA', 'Data', '2005-11-18 00:00:00', '2005-11-18 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'COL', 'Column', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'COLM', 'Column', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'IDX', 'Index', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'IDXM', 'Index', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PK', 'PK', '2005-12-15 00:00:00', '2005-12-15 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PKM', 'PK', '2005-12-15 00:00:00', '2005-12-15 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'FK', 'FK', '2005-11-18 00:00:00', '2005-11-18 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'FKM', 'FK', '2005-11-18 00:00:00', '2005-11-18 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PRIV', 'Privilege', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PRIVM', 'Privilege', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'TABLE', 'Tables', '2005-12-21 00:00:00', '2005-12-21 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'FOLDER', 'Folder', '2006-01-26 00:00:00', '2006-01-26 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'TRG', 'Trigger', '2006-02-28 00:00:00', '2006-02-28 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'TRGM', 'Trigger', '2006-02-28 00:00:00', '2006-02-28 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PROCLS', 'Procedures', '2006-04-13 00:00:00', '2006-04-13 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'TEXT', 'Text', '2006-05-08 00:00:00', '2006-05-08 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PCOL', 'Procedure/Function Column', '2006-06-06 00:00:00', '2006-06-06 00:00:00', 'sys'); INSERT INTO in_sync_cmp_type VALUES ( 'PCOLM', 'Procedure/Function Column', '2006-06-06 00:00:00', '2006-06-06 00:00:00', 'sys'); */ const char *szSQL = "select \ cmp_type_cd, \ description, \ ctrl_ins_dtm, \ ctrl_upd_dtm, \ ctrl_usr_id \ from in_sync_cmp_type"; rc = SQLExecDirect( hstmt, ( SQLCHAR * ) szSQL, (SQLINTEGER) strlen( szSQL ) ); if ( !RC_SUCCESS ( rc ) ) return rc; rc = FetchRows( hstmt, cRow, pRowBind, nRowBindOffset, vRow, bRowBindOffset ); if ( hstmt != NULL ) { ::SQLFreeStmt( hstmt, SQL_DROP ); hstmt = NULL; } if ( bUI && RC_SUCCESS( rc ) ) { // write to list for ( UINT nRow = 0; nRow < vRow.size(); ++nRow ) { const BUF4 &row = vRow[nRow]; CString sText; if ( row.cmp_type_cdIND != SQL_NULL_DATA ) sText = row.cmp_type_cd; else sText = ""; sText += " - "; if ( row.descriptionIND != SQL_NULL_DATA ) sText += row.description; else sText += ""; sText += " - "; m_lb.AddString( sText ); } } return rc; } void CChildView::TestConnect() { SQLHENV henvFB = NULL; SQLHDBC hdbcFB = NULL; SQLHSTMT hstmtFB = NULL; // connect to Firebird // data source is not created on purpose to cause crash or you can create // a real firebird ODBC data source and you will also get a crash later trying // to connect to MySQL if you successfully connect to Firebird const char *szConnect = "DSN=fbtest;UID=SYSDBA;PWD=MASTERKEY"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henvFB, hdbcFB, szConnect ); if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henvFB, hdbcFB, hstmtFB, rc, "", "" ); } const UINT cTryMax = 10; for ( UINT cTry = 0; cTry < cTryMax && hdbcFB != NULL; ++cTry ) { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; // to do: substitute your database connection info below ASSERT( FALSE ); const char *szConnect = "DSN=mysql;UID=root;PWD=root"; ASSERT( szConnect != NULL && *szConnect ); SQLRETURN rc = Connect( henv, hdbc, szConnect ); if ( !RC_SUCCESS( rc ) ) { DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } else { // successfully connected to database rc = SetAutoCommit( hdbc, false ); if ( !RC_SUCCESS( rc ) ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); const bool bCommitOnDisconnect = false; rc = ::SQLTransact( henv, hdbc, bCommitOnDisconnect ? SQL_COMMIT : SQL_ROLLBACK ); if ( !RC_SUCCESS( rc ) ) DiagSQLError( henv, hdbc, hstmt, rc, "", "" ); } if ( hdbc != NULL ) Disconnect( henv, hdbc ); if ( henv != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henv ); if ( !RC_SUCCESS( rc ) ) break; } if ( hdbcFB != NULL ) Disconnect( henvFB, hdbcFB ); if ( henvFB != NULL ) SQLFreeHandle( SQL_HANDLE_ENV, henvFB ); } void CChildView::OnTestRuntest() { TestConnect(); } void CChildView::OnUpdateTestRuntest(CCmdUI *pCmdUI) { pCmdUI->Enable( TRUE ); } void CChildView::OnTest2() { TestGarbledCharData( false ); } void CChildView::OnUpdateTest2(CCmdUI *pCmdUI) { pCmdUI->Enable( FALSE ); } void CChildView::GetLastError( const char *szCaption, const char *szRoutine ) { bool bProcessed = false; DWORD nLastError = ::GetLastError(); // // check for extended internet errors // if ( nLastError == ERROR_INTERNET_EXTENDED_ERROR ) { // // allocate on stack so it will be freed automatically // const UINT BUF_SZ = 2048; // DWORD dwLen = BUF_SZ; // TCHAR *szBuf = ( TCHAR * ) _alloca( BUF_SZ ); // DWORD dwError; // if ( InternetGetLastResponseInfo( &dwError, szBuf, &dwLen ) ) { // bProcessed = true; //MessageBox( (LPCTSTR) szBuf, ROUTINE, MB_OK ); // } // else { // nLastError = ::GetLastError(); // } // } if ( !bProcessed ) { LPVOID lpMsgBuf; ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf,0,NULL); MessageBox( (LPCTSTR) lpMsgBuf, szRoutine, MB_OK ); // Free the buffer. LocalFree( lpMsgBuf ); } } SQLRETURN CChildView::TestSQLAllocStmt( SQLHENV &henv, SQLHDBC &hdbc ) { ASSERT( henv != NULL ); ASSERT( hdbc != NULL ); SQLHSTMT hstmt = NULL; SQLRETURN rc = ::SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; rc = ExecuteSQLProcedureColumns( hstmt, "", "", "My Comparisons" ); if ( hstmt != NULL ) { ::SQLFreeStmt( hstmt, SQL_DROP ); hstmt = NULL; } if ( !RC_SUCCESS( rc ) ) return rc; for ( UINT i = 0; i < 10; ++i ) { SQLHSTMT hstmt = NULL; SQLRETURN rc = ::SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ); if ( !RC_SUCCESS( rc ) ) return rc; if ( hstmt != NULL ) { ::SQLFreeStmt( hstmt, SQL_DROP ); hstmt = NULL; } } return SQL_SUCCESS; } SQLRETURN CChildView::ExecuteSQLProcedureColumns( SQLHSTMT hstmt, const TCHAR *szProcedureCat, const TCHAR *szProcedureSchem, const TCHAR *szProcedureName ) { const char *ROUTINE = "ExecuteSQLProcedureColumns"; ASSERT( hstmt != NULL ); size_t cbProcedureCat = _tcslen( szProcedureCat ); size_t cbProcedureSchem = _tcslen( szProcedureSchem ); size_t cbProcedureName = _tcslen( szProcedureName ); // must use NULL for empty string input parameters ASSERT( *szProcedureName ); SQLRETURN rc = ::SQLProcedureColumns( hstmt, ( SQLCHAR * ) ( *szProcedureCat ? szProcedureCat : NULL ), ( SQLSMALLINT ) cbProcedureCat, ( SQLCHAR * ) ( *szProcedureSchem ? szProcedureSchem : NULL ), ( SQLSMALLINT ) cbProcedureSchem, ( SQLCHAR * ) szProcedureName, ( SQLSMALLINT ) cbProcedureName, NULL, 0 ); return rc; } PK [{6nNX&&testDD/ChildView.h// ChildView.h : interface of the CChildView class // #pragma once #include enum { TABLE_CAT_SZ = 255 }; enum { TABLE_SCHEM_SZ = 128 }; enum { TABLE_NAME_SZ = 128 }; enum { TABLE_TYPE_SZ = 60 }; #pragma pack( push, 1 ) typedef struct tagBuf { long numIND; long num; long descriptionIND; char description[ 100 ]; long table_catIND; char table_cat[ TABLE_CAT_SZ + 1 ]; long table_schemIND; char table_schem[ TABLE_SCHEM_SZ + 1 ]; long table_nameIND; char table_name[ TABLE_NAME_SZ + 1 ]; long table_typeIND; char table_type[ TABLE_TYPE_SZ + 1 ]; struct tagBuf() { numIND = SQL_NULL_DATA; num = 0; const char *DESCRIPTION = "This is a description of some sort. Testing"; descriptionIND = (long) strlen( DESCRIPTION ); strcpy( description, DESCRIPTION ); table_catIND = SQL_NULL_DATA; table_cat[0] = 0; table_schemIND = SQL_NULL_DATA; table_schem[0] = 0; table_nameIND = SQL_NULL_DATA; table_name[0] = 0; table_typeIND = SQL_NULL_DATA; table_type[0] = 0; } } BUF; #pragma pack( pop ) typedef struct tagBuf2 { long drgIND; char drg[ 3 + 1]; long descriptionIND; char description[ 70 + 1 ]; // decimal(6,4) long drg_weightIND; char drg_weight[ 12 + 1 ]; long runidIND; long runid; struct tagBuf2() { //drgIND = SQL_NULL_DATA; //drg[0] = '\0'; strcpy( drg, "123" ); drgIND = (long) strlen( drg ); const char *DESCRIPTION = "This is a description of some sort. Testing"; descriptionIND = (long) strlen( DESCRIPTION ); strcpy( description, DESCRIPTION ); strcpy( drg_weight, "12.42" ); drg_weightIND = (long) strlen( drg_weight ); runid = 15; runidIND = sizeof(long); } } BUF2; enum { MPCNO_SZ = 2 }; enum { MPCDESC_SZ = 100 }; #pragma pack( push, 1 ) typedef struct tagBuf3 { char chFiller[8]; long mpcnoIND; char mpcno[ MPCNO_SZ + 1]; long mpcdescIND; char mpcdesc[ MPCDESC_SZ + 1 ]; char filler[ 2 ]; struct tagBuf3() { mpcnoIND = SQL_NULL_DATA; mpcno[0] = '\0'; mpcdescIND = SQL_NULL_DATA; mpcdesc[0] = '\0'; } } BUF3; #pragma pack( pop ) enum { CMP_TYPE_CD_SZ = 8 }; enum { DESCRIPTION_SZ = 30 }; enum { CTRL_USR_ID_SZ = 128 }; #pragma pack( push, 1 ) typedef struct tagBuf4 { char chFiller[8]; long cmp_type_cdIND; char cmp_type_cd[ CMP_TYPE_CD_SZ + 1]; long descriptionIND; char description[ DESCRIPTION_SZ + 1 ]; long ctrl_ins_dtmIND; TIMESTAMP_STRUCT ctrl_ins_dtm; long ctrl_upd_dtmIND; TIMESTAMP_STRUCT ctrl_upd_dtm; long ctrl_usr_idIND; char ctrl_usr_id[ CTRL_USR_ID_SZ + 1 ]; char extra[8]; struct tagBuf4() { memset(chFiller, 0, sizeof(tagBuf4)); cmp_type_cdIND = SQL_NULL_DATA; cmp_type_cd[0] = '\0'; descriptionIND = SQL_NULL_DATA; description[0] = '\0'; ctrl_upd_dtmIND = SQL_NULL_DATA; memset( &ctrl_upd_dtm, 0, sizeof( ctrl_upd_dtm ) ); ctrl_ins_dtmIND = SQL_NULL_DATA; memset( &ctrl_ins_dtm, 0, sizeof( ctrl_ins_dtm ) ); ctrl_usr_idIND = SQL_NULL_DATA; ctrl_usr_id[0] = '\0'; } } BUF4; #pragma pack( pop ) //#pragma pack( push, 1 ) typedef struct tagRoute { char chFiller[8]; long rt_idIND; long rt_id; long rt_arrive_atIND; TIMESTAMP_STRUCT rt_arrive_at; char junk[4]; } ROUTE; //#pragma pack( pop ) // CChildView window class CChildView : public CWnd { // Construction public: CChildView(); // Attributes public: protected: BUF m_baseRow; CListBox m_lb; // Operations public: // Overrides protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); // Implementation public: virtual ~CChildView(); // Generated message map functions protected: typedef struct tagTestMT { SQLHENV henv; SQLHDBC hdbc; CChildView *pView; } TEST_MT; static UINT TestSQLTablesMTProc( LPVOID param ); static UINT TestSQLAllocStmtMTProc( LPVOID param ); afx_msg void OnPaint(); SQLRETURN Connect( SQLHENV &henv, SQLHDBC &hdbc, const char *szConnect ); SQLRETURN Disconnect( SQLHENV &henv, SQLHDBC &hdbc ); SQLRETURN TestBindOffset( SQLHENV &m_henv, SQLHDBC &hdbc, SQLHSTMT &hstmt ); SQLRETURN TestBindParamOffsetPtrInsert( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt ); SQLRETURN TestBindParamOffsetPtrInsert2( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, const bool bBindOffset ); SQLRETURN TestBindParamOffsetPtrInsert3( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, const bool bBindOffset ); void TestUpdateTimeStamp( const bool bBindOffset ); SQLRETURN TestUpdateTimeStamp( SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt, const bool bBindOffset ); void Testparameterbindoffsetinsert( const bool bBindOffset, const UINT nTest ); SQLRETURN TestSQLTables( SQLHENV &m_henv, SQLHDBC &hdbc, const char *szTableCat, const char *szTableSchem, const char *szTableName, const char *szTableType, DWORD &cRow, const bool bRowBindOffset = false ); SQLRETURN ExecuteSQLProcedureColumns( SQLHSTMT hstmt, const TCHAR *szProcedureCat, const TCHAR *szProcedureSchem, const TCHAR *szProcedureName ); SQLRETURN TestSQLAllocStmt( SQLHENV &henv, SQLHDBC &hdbc ); template< typename T > SQLRETURN FetchRows( SQLHSTMT &hstmt, DWORD &cFetched, T *pRowBind, SQLUINTEGER &nRowBindOffset, vector< T > &vRow, const bool bRowBindOffset = true ); SQLRETURN FetchNextRow( HSTMT &hstmt ); RETCODE DiagSQLError( SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, const SQLRETURN rc, const char *ROUTINE, const char *szContext = NULL ); void GetLastError( const char *szCaption, const char *szRoutine ); SQLRETURN SetAutoCommit( SQLHDBC hdbc, const bool bAutoCommit ); afx_msg void OnTestTestparameterbindoffsetsequential(); afx_msg void OnUpdateTestTestparameterbindoffsetsequential(CCmdUI *pCmdUI); afx_msg void OnTesttabletypes(); afx_msg void OnUpdateTesttabletypes(CCmdUI *pCmdUI); void TestSQLTables( const bool bRowBindOffset ); void TestSQLTablesMT(); void TestGarbledCharData( const bool bParamBindOffset ); SQLRETURN TestGarbledCharData( SQLHENV &m_henv, SQLHDBC &hdbc, DWORD &cRow, const bool bRowBindOffset = false ); BOOL CreateThreadSuspend( CWinThread *pThread, const bool bAutoDelete, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ); void TestConnect(); DECLARE_MESSAGE_MAP() // virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnTestTestparameterbindoffsetinsert(); afx_msg void OnUpdateTestTestparameterbindoffsetinsert(CCmdUI *pCmdUI); afx_msg void OnTestTestwithoutparameterbindoffset(); afx_msg void OnUpdateTestTestwithoutparameterbindoffset(CCmdUI *pCmdUI); afx_msg void OnTestTestparameterlongerror(); afx_msg void OnUpdateTestTestparameterlongerror(CCmdUI *pCmdUI); afx_msg void OnTestTestparameterlongerrornobindoffsetpointer(); afx_msg void OnUpdateTestTestparameterlongerrornobindoffsetpointer(CCmdUI *pCmdUI); afx_msg void OnTestSQLTablesWithRowoffsetpointer(); afx_msg void OnUpdateTestSQLTablesWithRowOffsetPointer(CCmdUI *pCmdUI); afx_msg void OnTestSQLTablesWithoutrowoffsetpointer(); afx_msg void OnUpdateTestSQLTtablesWithoutrowoffsetpointer(CCmdUI *pCmdUI); public: afx_msg void OnTestTestsqltablemulti(); afx_msg void OnUpdateTestTestsqltablemulti(CCmdUI *pCmdUI); afx_msg void OnTestRuntest(); afx_msg void OnUpdateTestRuntest(CCmdUI *pCmdUI); afx_msg void OnTest2(); afx_msg void OnUpdateTest2(CCmdUI *pCmdUI); }; PK ;3aߧ testDD/MainFrm.cpp// MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h" #include "TestDD.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMainFrame IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE() ON_WM_SETFOCUS() END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; // CMainFrame construction/destruction CMainFrame::CMainFrame() { // TODO: add member initialization code here } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // create a view to occupy the client area of the frame if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) { TRACE0("Failed to create view window\n"); return -1; } if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.dwExStyle &= ~WS_EX_CLIENTEDGE; cs.lpszClass = AfxRegisterWndClass(0); return TRUE; } // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG // CMainFrame message handlers void CMainFrame::OnSetFocus(CWnd* /*pOldWnd*/) { // forward focus to the view window m_wndView.SetFocus(); } BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // let the view have first crack at the command if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; // otherwise, do default handling return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } PK ;3ĶItestDD/MainFrm.h// MainFrm.h : interface of the CMainFrame class // #pragma once #include "ChildView.h" class CMainFrame : public CFrameWnd { public: CMainFrame(); protected: DECLARE_DYNAMIC(CMainFrame) // Attributes public: // Operations public: // Overrides public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); // Implementation public: virtual ~CMainFrame(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; // Generated message map functions protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSetFocus(CWnd *pOldWnd); DECLARE_MESSAGE_MAP() }; PK ;3-[[testDD/ReadMe.txt================================================================================ MICROSOFT FOUNDATION CLASS LIBRARY : TestDD Project Overview =============================================================================== The application wizard has created this TestDD application for you. This application not only demonstrates the basics of using the Microsoft Foundation Classes but is also a starting point for writing your application. This file contains a summary of what you will find in each of the files that make up your TestDD application. TestDD.vcproj This is the main project file for VC++ projects generated using an application wizard. It contains information about the version of Visual C++ that generated the file, and information about the platforms, configurations, and project features selected with the application wizard. TestDD.h This is the main header file for the application. It includes other project specific headers (including Resource.h) and declares the CTestDDApp application class. TestDD.cpp This is the main application source file that contains the application class CTestDDApp. TestDD.rc This is a listing of all of the Microsoft Windows resources that the program uses. It includes the icons, bitmaps, and cursors that are stored in the RES subdirectory. This file can be directly edited in Microsoft Visual C++. Your project resources are in 1033. res\TestDD.ico This is an icon file, which is used as the application's icon. This icon is included by the main resource file TestDD.rc. res\TestDD.rc2 This file contains resources that are not edited by Microsoft Visual C++. You should place all resources not editable by the resource editor in this file. ///////////////////////////////////////////////////////////////////////////// For the main frame window: The project includes a standard MFC interface. MainFrm.h, MainFrm.cpp These files contain the frame class CMainFrame, which is derived from CFrameWnd and controls all SDI frame features. res\Toolbar.bmp This bitmap file is used to create tiled images for the toolbar. The initial toolbar and status bar are constructed in the CMainFrame class. Edit this toolbar bitmap using the resource editor, and update the IDR_MAINFRAME TOOLBAR array in TestDD.rc to add toolbar buttons. ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// Other Features: ActiveX Controls The application includes support to use ActiveX controls. Database support The application wizard has added the basic level of database support for your program. Only the needed files have been included. ///////////////////////////////////////////////////////////////////////////// Other standard files: StdAfx.h, StdAfx.cpp These files are used to build a precompiled header (PCH) file named TestDD.pch and a precompiled types file named StdAfx.obj. Resource.h This is the standard header file, which defines new resource IDs. Microsoft Visual C++ reads and updates this file. TestDD.manifest Application manifest files are used by Windows XP to describe an applications dependency on specific versions of Side-by-Side assemblies. The loader uses this information to load the appropriate assembly from the assembly cache or private from the application. The Application manifest maybe included for redistribution as an external .manifest file that is installed in the same folder as the application executable or it may be included in the executable in the form of a resource. ///////////////////////////////////////////////////////////////////////////// Other notes: The application wizard uses "TODO:" to indicate parts of the source code you should add to or customize. If your application uses MFC in a shared DLL, and your application is in a language other than the operating system's current language, you will need to copy the corresponding localized resources MFC70XXX.DLL from the Microsoft Visual C++ CD-ROM under the Win\System directory to your computer's system or system32 directory, and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation. For example, MFC70DEU.DLL contains resources translated to German.) If you don't do this, some of the UI elements of your application will remain in the language of the operating system. ///////////////////////////////////////////////////////////////////////////// PK ;5O  testDD/resource.h//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by TestDD.rc // #define IDR_MANIFEST 1 #define IDD_ABOUTBOX 100 #define IDP_OLE_INIT_FAILED 100 #define IDR_MAINFRAME 128 #define IDR_TestDDTYPE 129 #define ID_TEST_TESTPARAMETERBINDOFFSETSEQUENTIAL 130 #define ID_TESTTABLETYPES 131 #define ID_TEST_TESTPARAMETERBINDOFFSETINSERT 132 #define ID_TEST_TESTWITHOUTPARAMETERBINDOFFSET 133 #define ID_TEST_TESTPARAMETERLONGERROR 134 #define ID_TEST_TESTPARAMETERLONGERRORNOBINDOFFSETPOINTER 135 #define ID_TEST_TESTTABLETYPES 136 #define ID_TESTSQLTABLESWITHROWOFFSETPOINTER 137 #define ID_TEST_TESTSQLTABLESWITHOUTPARAMETEROFFSETPOINTER 138 #define ID_TEST_TESTSQLTABLESWITHOUTROWOFFSETPOINTER 139 #define ID_TEST_TESTSQLTABLEMULTI 140 #define ID_TEST_RUNTEST 141 #define ID_TEST_2 142 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 143 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif PK ;3JtestDD/stdafx.cpp// stdafx.cpp : source file that includes just the standard includes // TestDD.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" PK %;3<5ctestDD/stdafx.h// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, // but are changed infrequently #pragma once #ifndef VC_EXTRALEAN #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #endif // Modify the following defines if you have to target a platform prior to the ones specified below. // Refer to MSDN for the latest info on corresponding values for different platforms. #ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later. #define WINVER 0x0400 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later. #endif #ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later. #define _WIN32_WINNT 0x0400 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later. #endif #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. #endif #ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later. #define _WIN32_IE 0x0400 // Change this to the appropriate value to target IE 5.0 or later. #endif #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit // turns off MFC's hiding of some common and often safely ignored warning messages #define _AFX_ALL_WARNINGS #include // MFC core and standard components #include // MFC extensions #include // MFC Automation classes // Here, minimal DB support is requested. No view is chosen. #include // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT #include // ODBC using namespace std;PK VH{6 hHEtestDD/TestDD.aps f$HWB lc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rc(B$HWB0 !!resource.hIDR_MANIFEST1IDD_ABOUTBOX100IDP_OLE_INIT_FAILED100IDR_MAINFRAME128IDR_TestDDTYPE129 ID_TEST_TESTPARAMETERBINDOFFSETSEQUENTIAL130 ID_TESTTABLETYPES131 ID_TEST_TESTPARAMETERBINDOFFSETINSERT132 ID_TEST_TESTWITHOUTPARAMETERBINDOFFSET133 ID_TEST_TESTPARAMETERLONGERROR134ID_TEST_TESTPARAMETERLONGERRORNOBINDOFFSETPOINTER135ID_TEST_TESTTABLETYPES136ID_TESTSQLTABLESWITHROWOFFSETPOINTER137ID_TEST_TESTSQLTABLESWITHOUTPARAMETEROFFSETPOINTER138ID_TEST_TESTSQLTABLESWITHOUTROWOFFSETPOINTER139ID_TEST_TESTSQLTABLEMULTI140ID_TEST_RUNTEST141ID_TEST_2142_APS_NEXT_RESOURCE_VALUE143_APS_NEXT_COMMAND_VALUE32771_APS_NEXT_CONTROL_VALUE1000_APS_NEXT_SYMED_VALUE101!!afxres.h!winres.hVS_VERSION_INFO1IDC_STATIC(-1))!CBRS_ALIGN_LEFT0x1000L6CBRS_ALIGN_TOP0x2000L7CBRS_ALIGN_RIGHT0x4000L8CBRS_ALIGN_BOTTOM0x8000L9CBRS_ALIGN_ANY0xF000L:CBRS_BORDER_LEFT0x0100L<CBRS_BORDER_TOP0x0200L=CBRS_BORDER_RIGHT0x0400L>CBRS_BORDER_BOTTOM0x0800L?CBRS_BORDER_ANY0x0F00L@CBRS_TOOLTIPS0x0010LBCBRS_FLYBY0x0020LCCBRS_FLOAT_MULTI0x0040LDCBRS_BORDER_3D0x0080LECBRS_HIDE_INPLACE0x0008LFCBRS_SIZE_DYNAMIC0x0004LGCBRS_SIZE_FIXED0x0002LHCBRS_FLOATING0x0001LICBRS_GRIPPER0x00400000LKCBRS_ORIENT_HORZ(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM)MCBRS_ORIENT_VERT(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT)NCBRS_ORIENT_ANY(CBRS_ORIENT_HORZ|CBRS_ORIENT_VERT)OCBRS_ALL0x0040FFFFLQCBRS_NOALIGN0x00000000LVCBRS_LEFT(CBRS_ALIGN_LEFT|CBRS_BORDER_RIGHT)WCBRS_TOP(CBRS_ALIGN_TOP|CBRS_BORDER_BOTTOM)XCBRS_RIGHT(CBRS_ALIGN_RIGHT|CBRS_BORDER_LEFT)YCBRS_BOTTOM(CBRS_ALIGN_BOTTOM|CBRS_BORDER_TOP)ZID_MFCLOC_MANIFEST1000^ID_INDICATOR_EXT0xE700dID_INDICATOR_CAPS0xE701eID_INDICATOR_NUM0xE702fID_INDICATOR_SCRL0xE703gID_INDICATOR_OVR0xE704hID_INDICATOR_REC0xE705iID_INDICATOR_KANA0xE706jID_SEPARATOR0lAFX_IDS_APP_TITLE0xE000AFX_IDS_IDLEMESSAGE0xE001AFX_IDS_HELPMODEMESSAGE0xE002AFX_IDS_APP_TITLE_EMBEDDING0xE003AFX_IDS_COMPANY_NAME0xE004AFX_IDS_OBJ_TITLE_INPLACE0xE005ID_FILE_NEW0xE100ID_FILE_OPEN0xE101ID_FILE_CLOSE0xE102ID_FILE_SAVE0xE103ID_FILE_SAVE_AS0xE104ID_FILE_PAGE_SETUP0xE105ID_FILE_PRINT_SETUP0xE106ID_FILE_PRINT0xE107ID_FILE_PRINT_DIRECT0xE108ID_FILE_PRINT_PREVIEW0xE109ID_FILE_UPDATE0xE10AID_FILE_SAVE_COPY_AS0xE10BID_FILE_SEND_MAIL0xE10CID_FILE_NEW_FRAME0xE10DID_FILE_MRU_FIRST0xE110ID_FILE_MRU_FILE10xE110ID_FILE_MRU_FILE20xE111ID_FILE_MRU_FILE30xE112ID_FILE_MRU_FILE40xE113ID_FILE_MRU_FILE50xE114ID_FILE_MRU_FILE60xE115ID_FILE_MRU_FILE70xE116ID_FILE_MRU_FILE80xE117ID_FILE_MRU_FILE90xE118ID_FILE_MRU_FILE100xE119ID_FILE_MRU_FILE110xE11AID_FILE_MRU_FILE120xE11BID_FILE_MRU_FILE130xE11CID_FILE_MRU_FILE140xE11DID_FILE_MRU_FILE150xE11EID_FILE_MRU_FILE160xE11FID_FILE_MRU_LAST0xE11FID_EDIT_CLEAR0xE120ID_EDIT_CLEAR_ALL0xE121ID_EDIT_COPY0xE122ID_EDIT_CUT0xE123ID_EDIT_FIND0xE124ID_EDIT_PASTE0xE125ID_EDIT_PASTE_LINK0xE126ID_EDIT_PASTE_SPECIAL0xE127ID_EDIT_REPEAT0xE128ID_EDIT_REPLACE0xE129ID_EDIT_SELECT_ALL0xE12AID_EDIT_UNDO0xE12BID_EDIT_REDO0xE12CID_WINDOW_NEW0xE130ID_WINDOW_ARRANGE0xE131ID_WINDOW_CASCADE0xE132ID_WINDOW_TILE_HORZ0xE133ID_WINDOW_TILE_VERT0xE134ID_WINDOW_SPLIT0xE135ID_APP_ABOUT0xE140ID_APP_EXIT0xE141ID_HELP_INDEX0xE142ID_HELP_FINDER0xE143ID_HELP_USING0xE144ID_CONTEXT_HELP0xE145ID_HELP0xE146ID_DEFAULT_HELP0xE147ID_NEXT_PANE0xE150ID_PREV_PANE0xE151ID_FORMAT_FONT0xE160ID_OLE_INSERT_NEW0xE200ID_OLE_EDIT_LINKS0xE201ID_OLE_EDIT_CONVERT0xE202ID_OLE_EDIT_CHANGE_ICON0xE203ID_OLE_EDIT_PROPERTIES0xE204ID_OLE_VERB_FIRST0xE210AFX_ID_PREVIEW_CLOSE0xE300 AFX_ID_PREVIEW_NUMPAGE0xE301 AFX_ID_PREVIEW_NEXT0xE302 AFX_ID_PREVIEW_PREV0xE303 AFX_ID_PREVIEW_PRINT0xE304AFX_ID_PREVIEW_ZOOMIN0xE305AFX_ID_PREVIEW_ZOOMOUT0xE306ID_VIEW_TOOLBAR0xE800ID_VIEW_STATUS_BAR0xE801ID_VIEW_REBAR0xE804ID_VIEW_AUTOARRANGE0xE805ID_VIEW_SMALLICON0xE810ID_VIEW_LARGEICON0xE811ID_VIEW_LIST0xE812ID_VIEW_DETAILS0xE813ID_VIEW_LINEUP0xE814ID_VIEW_BYNAME0xE815AFX_ID_VIEW_MINIMUMID_VIEW_SMALLICONAFX_ID_VIEW_MAXIMUMID_VIEW_BYNAMEID_RECORD_FIRST0xE900#ID_RECORD_LAST0xE901$ID_RECORD_NEXT0xE902%ID_RECORD_PREV0xE903&IDC_STATIC(-1).AFX_IDS_SCSIZE0xEF007AFX_IDS_SCMOVE0xEF018AFX_IDS_SCMINIMIZE0xEF029AFX_IDS_SCMAXIMIZE0xEF03:AFX_IDS_SCNEXTWINDOW0xEF04;AFX_IDS_SCPREVWINDOW0xEF05<AFX_IDS_SCCLOSE0xEF06=AFX_IDS_SCRESTORE0xEF12>AFX_IDS_SCTASKLIST0xEF13?AFX_IDS_MDICHILD0xEF1FAAFX_IDS_DESKACCESSORY0xEFDACAFX_IDS_OPENFILE0xF000FAFX_IDS_SAVEFILE0xF001GAFX_IDS_ALLFILTER0xF002HAFX_IDS_UNTITLED0xF003IAFX_IDS_SAVEFILECOPY0xF004JAFX_IDS_PREVIEW_CLOSE0xF005KAFX_IDS_UNNAMED_FILE0xF006LAFX_IDS_HIDE0xF011MAFX_IDP_NO_ERROR_AVAILABLE0xF020PAFX_IDS_NOT_SUPPORTED_EXCEPTION0xF021QAFX_IDS_RESOURCE_EXCEPTION0xF022RAFX_IDS_MEMORY_EXCEPTION0xF023SAFX_IDS_USER_EXCEPTION0xF024TAFX_IDS_INVALID_ARG_EXCEPTION0xF025UAFX_IDS_PRINTONPORT0xF040XAFX_IDS_ONEPAGE0xF041YAFX_IDS_TWOPAGE0xF042ZAFX_IDS_PRINTPAGENUM0xF043[AFX_IDS_PREVIEWPAGEDESC0xF044\AFX_IDS_PRINTDEFAULTEXT0xF045]AFX_IDS_PRINTDEFAULT0xF046^AFX_IDS_PRINTFILTER0xF047_AFX_IDS_PRINTCAPTION0xF048`AFX_IDS_PRINTTOFILE0xF049aAFX_IDS_OBJECT_MENUITEM0xF080eAFX_IDS_EDIT_VERB0xF081fAFX_IDS_ACTIVATE_VERB0xF082gAFX_IDS_CHANGE_LINK0xF083hAFX_IDS_AUTO0xF084iAFX_IDS_MANUAL0xF085jAFX_IDS_FROZEN0xF086kAFX_IDS_ALL_FILES0xF087lAFX_IDS_SAVE_MENU0xF088nAFX_IDS_UPDATE_MENU0xF089oAFX_IDS_SAVE_AS_MENU0xF08ApAFX_IDS_SAVE_COPY_AS_MENU0xF08BqAFX_IDS_EXIT_MENU0xF08CrAFX_IDS_UPDATING_ITEMS0xF08DsAFX_IDS_METAFILE_FORMAT0xF08EuAFX_IDS_DIB_FORMAT0xF08FvAFX_IDS_BITMAP_FORMAT0xF090wAFX_IDS_LINKSOURCE_FORMAT0xF091xAFX_IDS_EMBED_FORMAT0xF092yAFX_IDS_PASTELINKEDTYPE0xF094{AFX_IDS_UNKNOWNTYPE0xF095|AFX_IDS_RTF_FORMAT0xF096}AFX_IDS_TEXT_FORMAT0xF097~AFX_IDS_INVALID_CURRENCY0xF098AFX_IDS_INVALID_DATETIME0xF099AFX_IDS_INVALID_DATETIMESPAN0xF09AAFX_IDP_INVALID_FILENAME0xF100AFX_IDP_FAILED_TO_OPEN_DOC0xF101AFX_IDP_FAILED_TO_SAVE_DOC0xF102AFX_IDP_ASK_TO_SAVE0xF103AFX_IDP_FAILED_TO_CREATE_DOC0xF104AFX_IDP_FILE_TOO_LARGE0xF105AFX_IDP_FAILED_TO_START_PRINT0xF106AFX_IDP_FAILED_TO_LAUNCH_HELP0xF107AFX_IDP_INTERNAL_FAILURE0xF108AFX_IDP_COMMAND_FAILURE0xF109AFX_IDP_FAILED_MEMORY_ALLOC0xF10AAFX_IDP_UNREG_DONE0xF10BAFX_IDP_UNREG_FAILURE0xF10CAFX_IDP_DLL_LOAD_FAILED0xF10DAFX_IDP_DLL_BAD_VERSION0xF10EAFX_IDP_PARSE_INT0xF110AFX_IDP_PARSE_REAL0xF111AFX_IDP_PARSE_INT_RANGE0xF112AFX_IDP_PARSE_REAL_RANGE0xF113AFX_IDP_PARSE_STRING_SIZE0xF114AFX_IDP_PARSE_RADIO_BUTTON0xF115AFX_IDP_PARSE_BYTE0xF116AFX_IDP_PARSE_UINT0xF117AFX_IDP_PARSE_DATETIME0xF118AFX_IDP_PARSE_CURRENCY0xF119AFX_IDP_PARSE_GUID0xF11AAFX_IDP_PARSE_TIME0xF11BAFX_IDP_PARSE_DATE0xF11CAFX_IDP_FAILED_INVALID_FORMAT0xF120AFX_IDP_FAILED_INVALID_PATH0xF121AFX_IDP_FAILED_DISK_FULL0xF122AFX_IDP_FAILED_ACCESS_READ0xF123AFX_IDP_FAILED_ACCESS_WRITE0xF124AFX_IDP_FAILED_IO_ERROR_READ0xF125AFX_IDP_FAILED_IO_ERROR_WRITE0xF126AFX_IDP_SCRIPT_ERROR0xF130AFX_IDP_SCRIPT_DISPATCH_EXCEPTION0xF131AFX_IDP_STATIC_OBJECT0xF180AFX_IDP_FAILED_TO_CONNECT0xF181AFX_IDP_SERVER_BUSY0xF182AFX_IDP_BAD_VERB0xF183AFX_IDS_NOT_DOCOBJECT0xF184AFX_IDP_FAILED_TO_NOTIFY0xF185AFX_IDP_FAILED_TO_LAUNCH0xF186AFX_IDP_ASK_TO_UPDATE0xF187AFX_IDP_FAILED_TO_UPDATE0xF188AFX_IDP_FAILED_TO_REGISTER0xF189AFX_IDP_FAILED_TO_AUTO_REGISTER0xF18AAFX_IDP_FAILED_TO_CONVERT0xF18BAFX_IDP_GET_NOT_SUPPORTED0xF18CAFX_IDP_SET_NOT_SUPPORTED0xF18DAFX_IDP_ASK_TO_DISCARD0xF18EAFX_IDP_FAILED_TO_CREATE0xF18FAFX_IDP_FAILED_MAPI_LOAD0xF190AFX_IDP_INVALID_MAPI_DLL0xF191AFX_IDP_FAILED_MAPI_SEND0xF192AFX_IDP_FILE_NONE0xF1A0AFX_IDP_FILE_GENERIC0xF1A1AFX_IDP_FILE_NOT_FOUND0xF1A2AFX_IDP_FILE_BAD_PATH0xF1A3AFX_IDP_FILE_TOO_MANY_OPEN0xF1A4AFX_IDP_FILE_ACCESS_DENIED0xF1A5AFX_IDP_FILE_INVALID_FILE0xF1A6AFX_IDP_FILE_REMOVE_CURRENT0xF1A7AFX_IDP_FILE_DIR_FULL0xF1A8AFX_IDP_FILE_BAD_SEEK0xF1A9AFX_IDP_FILE_HARD_IO0xF1AAAFX_IDP_FILE_SHARING0xF1ABAFX_IDP_FILE_LOCKING0xF1ACAFX_IDP_FILE_DISKFULL0xF1ADAFX_IDP_FILE_EOF0xF1AEAFX_IDP_ARCH_NONE0xF1B0AFX_IDP_ARCH_GENERIC0xF1B1AFX_IDP_ARCH_READONLY0xF1B2AFX_IDP_ARCH_ENDOFFILE0xF1B3AFX_IDP_ARCH_WRITEONLY0xF1B4AFX_IDP_ARCH_BADINDEX0xF1B5AFX_IDP_ARCH_BADCLASS0xF1B6AFX_IDP_ARCH_BADSCHEMA0xF1B7AFX_IDS_OCC_SCALEUNITS_PIXELS0xF1C0AFX_IDS_STATUS_FONT0xF230AFX_IDS_TOOLTIP_FONT0xF231AFX_IDS_UNICODE_FONT0xF232AFX_IDS_MINI_FONT0xF233AFX_IDP_SQL_CONNECT_FAIL0xF281AFX_IDP_SQL_RECORDSET_FORWARD_ONLY0xF282AFX_IDP_SQL_EMPTY_COLUMN_LIST0xF283AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH0xF284AFX_IDP_SQL_ILLEGAL_MODE0xF285AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED0xF286AFX_IDP_SQL_NO_CURRENT_RECORD0xF287AFX_IDP_SQL_NO_ROWS_AFFECTED0xF288AFX_IDP_SQL_RECORDSET_READONLY0xF289AFX_IDP_SQL_SQL_NO_TOTAL0xF28AAFX_IDP_SQL_ODBC_LOAD_FAILED0xF28BAFX_IDP_SQL_DYNASET_NOT_SUPPORTED0xF28CAFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED0xF28DAFX_IDP_SQL_API_CONFORMANCE0xF28EAFX_IDP_SQL_SQL_CONFORMANCE0xF28FAFX_IDP_SQL_NO_DATA_FOUND0xF290AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED0xF291AFX_IDP_SQL_ODBC_V2_REQUIRED0xF292AFX_IDP_SQL_NO_POSITIONED_UPDATES0xF293AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED0xF294AFX_IDP_SQL_DATA_TRUNCATED0xF295AFX_IDP_SQL_ROW_FETCH0xF296AFX_IDP_SQL_INCORRECT_ODBC0xF297AFX_IDP_SQL_UPDATE_DELETE_FAILED0xF298AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED0xF299AFX_IDP_SQL_FIELD_NOT_FOUND0xF29AAFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED0xF29B AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED0xF29C AFX_IDS_DELETED0xF29D AFX_IDP_DAO_ENGINE_INITIALIZATION0xF2B0AFX_IDP_DAO_DFX_BIND0xF2B1AFX_IDP_DAO_OBJECT_NOT_OPEN0xF2B2AFX_IDP_DAO_ROWTOOSHORT0xF2B3AFX_IDP_DAO_BADBINDINFO0xF2B4AFX_IDP_DAO_COLUMNUNAVAILABLE0xF2B5AFX_IDS_HTTP_TITLE0xF2D1!AFX_IDS_HTTP_NO_TEXT0xF2D2"AFX_IDS_HTTP_BAD_REQUEST0xF2D3#AFX_IDS_HTTP_AUTH_REQUIRED0xF2D4$AFX_IDS_HTTP_FORBIDDEN0xF2D5%AFX_IDS_HTTP_NOT_FOUND0xF2D6&AFX_IDS_HTTP_SERVER_ERROR0xF2D7'AFX_IDS_HTTP_NOT_IMPLEMENTED0xF2D8(AFX_IDS_CHECKLISTBOX_UNCHECK0xF2E1,AFX_IDS_CHECKLISTBOX_CHECK0xF2E2-AFX_IDS_CHECKLISTBOX_MIXED0xF2E3.AFX_IDC_LISTBOX1004AFX_IDC_CHANGE1015AFX_IDC_BROWSER1026AFX_IDC_PRINT_DOCNAME2019AFX_IDC_PRINT_PRINTERNAME202:AFX_IDC_PRINT_PORTNAME203;AFX_IDC_PRINT_PAGENUM204<ID_APPLY_NOW0x3021?ID_WIZBACK0x3023@ID_WIZNEXT0x3024AID_WIZFINISH0x3025BAFX_IDC_TAB_CONTROL0x3020CAFX_IDD_NEWTYPEDLG30721VAFX_IDD_PRINTDLG30722WAFX_IDD_PREVIEW_TOOLBAR30723XAFX_IDD_INSERTOBJECT30724[AFX_IDD_CHANGEICON30725\AFX_IDD_CONVERT30726]AFX_IDD_PASTESPECIAL30727^AFX_IDD_EDITLINKS30728_AFX_IDD_FILEBROWSE30729`AFX_IDD_BUSY30730aAFX_IDD_OBJECTPROPERTIES30732cAFX_IDD_CHANGESOURCE30733dAFX_IDD_EMPTYDIALOG30734gAFX_IDC_CONTEXTHELP30977kAFX_IDC_MAGNIFY30978lAFX_IDC_SMALLARROWS30979mAFX_IDC_HSPLITBAR30980nAFX_IDC_VSPLITBAR30981oAFX_IDC_NODROPCRSR30982pAFX_IDC_TRACKNWSE30983qAFX_IDC_TRACKNESW30984rAFX_IDC_TRACKNS30985sAFX_IDC_TRACKWE30986tAFX_IDC_TRACK4WAY30987uAFX_IDC_MOVE4WAY30988vAFX_IDC_MOUSE_PAN_NW30998zAFX_IDC_MOUSE_PAN_N30999{AFX_IDC_MOUSE_PAN_NE31000|AFX_IDC_MOUSE_PAN_W31001}AFX_IDC_MOUSE_PAN_HV31002~AFX_IDC_MOUSE_PAN_E31003AFX_IDC_MOUSE_PAN_SW31004AFX_IDC_MOUSE_PAN_S31005AFX_IDC_MOUSE_PAN_SE31006AFX_IDC_MOUSE_PAN_HORZ31007AFX_IDC_MOUSE_PAN_VERT31008AFX_IDC_MOUSE_ORG_HORZ31009AFX_IDC_MOUSE_ORG_VERT31010AFX_IDC_MOUSE_ORG_HV31011AFX_IDC_MOUSE_MASK31012AFX_IDB_MINIFRAME_MENU30994AFX_IDB_CHECKLISTBOX_9530996AFX_IDR_PREVIEW_ACCEL30997AFX_IDI_STD_MDIFRAME31233AFX_IDI_STD_FRAME31234AFX_IDC_FONTPROP1000AFX_IDC_FONTNAMES1001AFX_IDC_FONTSTYLES1002AFX_IDC_FONTSIZES1003AFX_IDC_STRIKEOUT1004AFX_IDC_UNDERLINE1005AFX_IDC_SAMPLEBOX1006AFX_IDC_COLOR_BLACK1100AFX_IDC_COLOR_WHITE1101AFX_IDC_COLOR_RED1102AFX_IDC_COLOR_GREEN1103AFX_IDC_COLOR_BLUE1104AFX_IDC_COLOR_YELLOW1105AFX_IDC_COLOR_MAGENTA1106AFX_IDC_COLOR_CYAN1107AFX_IDC_COLOR_GRAY1108AFX_IDC_COLOR_LIGHTGRAY1109AFX_IDC_COLOR_DARKRED1110AFX_IDC_COLOR_DARKGREEN1111AFX_IDC_COLOR_DARKBLUE1112AFX_IDC_COLOR_LIGHTBROWN1113AFX_IDC_COLOR_DARKMAGENTA1114AFX_IDC_COLOR_DARKCYAN1115AFX_IDC_COLORPROP1116AFX_IDC_SYSTEMCOLORS1117AFX_IDC_PROPNAME1201AFX_IDC_PICTURE1202AFX_IDC_BROWSE1203AFX_IDC_CLEAR1204AFX_IDD_PROPPAGE_COLOR32257AFX_IDD_PROPPAGE_FONT32258AFX_IDD_PROPPAGE_PICTURE32259AFX_IDB_TRUETYPE32384AFX_IDS_PROPPAGE_UNKNOWN0xFE01AFX_IDS_COLOR_DESKTOP0xFE04AFX_IDS_COLOR_APPWORKSPACE0xFE05AFX_IDS_COLOR_WNDBACKGND0xFE06AFX_IDS_COLOR_WNDTEXT0xFE07AFX_IDS_COLOR_MENUBAR0xFE08AFX_IDS_COLOR_MENUTEXT0xFE09AFX_IDS_COLOR_ACTIVEBAR0xFE0AAFX_IDS_COLOR_INACTIVEBAR0xFE0BAFX_IDS_COLOR_ACTIVETEXT0xFE0CAFX_IDS_COLOR_INACTIVETEXT0xFE0DAFX_IDS_COLOR_ACTIVEBORDER0xFE0EAFX_IDS_COLOR_INACTIVEBORDER0xFE0FAFX_IDS_COLOR_WNDFRAME0xFE10AFX_IDS_COLOR_SCROLLBARS0xFE11AFX_IDS_COLOR_BTNFACE0xFE12AFX_IDS_COLOR_BTNSHADOW0xFE13AFX_IDS_COLOR_BTNTEXT0xFE14AFX_IDS_COLOR_BTNHIGHLIGHT0xFE15AFX_IDS_COLOR_DISABLEDTEXT0xFE16AFX_IDS_COLOR_HIGHLIGHT0xFE17AFX_IDS_COLOR_HIGHLIGHTTEXT0xFE18AFX_IDS_REGULAR0xFE19AFX_IDS_BOLD0xFE1AAFX_IDS_ITALIC0xFE1BAFX_IDS_BOLDITALIC0xFE1CAFX_IDS_SAMPLETEXT0xFE1DAFX_IDS_DISPLAYSTRING_FONT0xFE1EAFX_IDS_DISPLAYSTRING_COLOR0xFE1FAFX_IDS_DISPLAYSTRING_PICTURE0xFE20AFX_IDS_PICTUREFILTER0xFE21AFX_IDS_PICTYPE_UNKNOWN0xFE22AFX_IDS_PICTYPE_NONE0xFE23AFX_IDS_PICTYPE_BITMAP0xFE24AFX_IDS_PICTYPE_METAFILE0xFE25AFX_IDS_PICTYPE_ICON0xFE26AFX_IDS_COLOR_PPG0xFE28AFX_IDS_COLOR_PPG_CAPTION0xFE29AFX_IDS_FONT_PPG0xFE2AAFX_IDS_FONT_PPG_CAPTION0xFE2BAFX_IDS_PICTURE_PPG0xFE2CAFX_IDS_PICTURE_PPG_CAPTION0xFE2DAFX_IDS_PICTUREBROWSETITLE0xFE30AFX_IDS_BORDERSTYLE_00xFE31AFX_IDS_BORDERSTYLE_10xFE32AFX_IDS_VERB_EDIT0xFE40AFX_IDS_VERB_PROPERTIES0xFE41AFX_IDP_PICTURECANTOPEN0xFE83AFX_IDP_PICTURECANTLOAD0xFE84AFX_IDP_PICTURETOOLARGE0xFE85AFX_IDP_PICTUREREADFAILED0xFE86AFX_IDP_E_ILLEGALFUNCTIONCALL0xFEA0AFX_IDP_E_OVERFLOW0xFEA1AFX_IDP_E_OUTOFMEMORY0xFEA2AFX_IDP_E_DIVISIONBYZERO0xFEA3 AFX_IDP_E_OUTOFSTRINGSPACE0xFEA4 AFX_IDP_E_OUTOFSTACKSPACE0xFEA5 AFX_IDP_E_BADFILENAMEORNUMBER0xFEA6 AFX_IDP_E_FILENOTFOUND0xFEA7 AFX_IDP_E_BADFILEMODE0xFEA8AFX_IDP_E_FILEALREADYOPEN0xFEA9AFX_IDP_E_DEVICEIOERROR0xFEAAAFX_IDP_E_FILEALREADYEXISTS0xFEABAFX_IDP_E_BADRECORDLENGTH0xFEACAFX_IDP_E_DISKFULL0xFEADAFX_IDP_E_BADRECORDNUMBER0xFEAEAFX_IDP_E_BADFILENAME0xFEAFAFX_IDP_E_TOOMANYFILES0xFEB0AFX_IDP_E_DEVICEUNAVAILABLE0xFEB1AFX_IDP_E_PERMISSIONDENIED0xFEB2AFX_IDP_E_DISKNOTREADY0xFEB3AFX_IDP_E_PATHFILEACCESSERROR0xFEB4AFX_IDP_E_PATHNOTFOUND0xFEB5AFX_IDP_E_INVALIDPATTERNSTRING0xFEB6AFX_IDP_E_INVALIDUSEOFNULL0xFEB7AFX_IDP_E_INVALIDFILEFORMAT0xFEB8AFX_IDP_E_INVALIDPROPERTYVALUE0xFEB9AFX_IDP_E_INVALIDPROPERTYARRAYINDEX0xFEBA AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME0xFEBB!AFX_IDP_E_SETNOTSUPPORTED0xFEBC"AFX_IDP_E_NEEDPROPERTYARRAYINDEX0xFEBD#AFX_IDP_E_SETNOTPERMITTED0xFEBE$AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME0xFEBF%AFX_IDP_E_GETNOTSUPPORTED0xFEC0&AFX_IDP_E_PROPERTYNOTFOUND0xFEC1'AFX_IDP_E_INVALIDCLIPBOARDFORMAT0xFEC2(AFX_IDP_E_INVALIDPICTURE0xFEC3)AFX_IDP_E_PRINTERERROR0xFEC4*AFX_IDP_E_CANTSAVEFILETOTEMP0xFEC5+AFX_IDP_E_SEARCHTEXTNOTFOUND0xFEC6,AFX_IDP_E_REPLACEMENTSTOOLONG0xFEC7-!!$HWB0  res\TestDD.ico res\Toolbar.bmp res\TestDD.manifest $HWB0 TEXTINCLUDE1$TEXTINCLUDE2$TEXTINCLUDE3$14128IDR_MAINFRAMEc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rcC$2128IDR_MAINFRAMEc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rcJ$241128IDR_MAINFRAMEc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rcQID_EDIT_CUT#ID_EDIT_COPY"ID_EDIT_PASTE%ID_APP_ABOUT@$4128IDR_MAINFRAMEc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rc`ID_TEST_RUNTESTID_TEST_2$9128IDR_MAINFRAMEc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rcoID_EDIT_COPY"ID_EDIT_PASTE%ID_EDIT_UNDO+ID_EDIT_CUT#ID_NEXT_PANEPID_PREV_PANEQID_EDIT_COPY"ID_EDIT_PASTE%ID_EDIT_CUT#ID_EDIT_UNDO+$5100IDD_ABOUTBOXc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rcIDC_STATICIDC_STATICIDC_STATICIDOK$161VS_VERSION_INFOc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rc$DESIGNINFOGUIDELINES$241IDR_MANIFESTc:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\TestDD.rc$69IDR_MAINFRAME$63585AFX_IDS_APP_TITLEAFX_IDS_IDLEMESSAGE$63697ID_INDICATOR_EXTID_INDICATOR_CAPSID_INDICATOR_NUMID_INDICATOR_SCRLID_INDICATOR_OVRID_INDICATOR_REC$63605ID_APP_ABOUT@ID_APP_EXITA$63606ID_NEXT_PANEPID_PREV_PANEQ$63604ID_WINDOW_SPLIT5$63603ID_EDIT_CLEAR ID_EDIT_CLEAR_ALL!ID_EDIT_COPY"ID_EDIT_CUT#ID_EDIT_FIND$ID_EDIT_PASTE%ID_EDIT_REPEAT(ID_EDIT_REPLACE)ID_EDIT_SELECT_ALL*ID_EDIT_UNDO+ID_EDIT_REDO,$63713ID_VIEW_TOOLBARID_VIEW_STATUS_BAR$63825AFX_IDS_SCSIZEAFX_IDS_SCMOVEAFX_IDS_SCMINIMIZEAFX_IDS_SCMAXIMIZEAFX_IDS_SCNEXTWINDOWAFX_IDS_SCPREVWINDOWAFX_IDS_SCCLOSE$63826AFX_IDS_SCRESTOREAFX_IDS_SCTASKLIST$$$HWB/0 c:\Documents and Settings\zidanf\My Documents\Visual Studio 2005\Projects\inSync\TestDD\resource.hC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include/afxres.hC:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include/winres.h2$HWB-0 TEXTINCLUDE1TEXTINCLUDE2TEXTINCLUDE314128IDR_MAINFRAME2128IDR_MAINFRAME241128IDR_MAINFRAME4128IDR_MAINFRAME9128IDR_MAINFRAME5100IDD_ABOUTBOX161VS_VERSION_INFODESIGNINFOGUIDELINES241IDR_MANIFEST69635856369763605636066360463603637136382563826&?$HWB.0 ID_SEPARATOR0IDOK1 IDR_MANIFEST1 VS_VERSION_INFO1 IDCANCEL2IDABORT3IDRETRY4IDIGNORE5IDYES6IDNO7IDCLOSE8IDHELP9IDD_ABOUTBOX100 IDP_OLE_INIT_FAILED100AFX_IDC_LISTBOX100AFX_IDC_CHANGE101_APS_NEXT_SYMED_VALUE101AFX_IDC_BROWSER102IDR_MAINFRAME128 IDR_TestDDTYPE129ID_TEST_TESTPARAMETERBINDOFFSETSEQUENTIAL130ID_TESTTABLETYPES131ID_TEST_TESTPARAMETERBINDOFFSETINSERT132ID_TEST_TESTWITHOUTPARAMETERBINDOFFSET133ID_TEST_TESTPARAMETERLONGERROR134ID_TEST_TESTPARAMETERLONGERRORNOBINDOFFSETPOINTER135ID_TEST_TESTTABLETYPES136ID_TESTSQLTABLESWITHROWOFFSETPOINTER137ID_TEST_TESTSQLTABLESWITHOUTPARAMETEROFFSETPOINTER138ID_TEST_TESTSQLTABLESWITHOUTROWOFFSETPOINTER139ID_TEST_TESTSQLTABLEMULTI140ID_TEST_RUNTEST141ID_TEST_2142_APS_NEXT_RESOURCE_VALUE143AFX_IDC_PRINT_DOCNAME201AFX_IDC_PRINT_PRINTERNAME202AFX_IDC_PRINT_PORTNAME203AFX_IDC_PRINT_PAGENUM204ID_MFCLOC_MANIFEST1000AFX_IDC_FONTPROP1000_APS_NEXT_CONTROL_VALUE1000AFX_IDC_FONTNAMES1001AFX_IDC_FONTSTYLES1002AFX_IDC_FONTSIZES1003AFX_IDC_STRIKEOUT1004AFX_IDC_UNDERLINE1005AFX_IDC_SAMPLEBOX1006AFX_IDC_COLOR_BLACK1100AFX_IDC_COLOR_WHITE1101AFX_IDC_COLOR_RED1102AFX_IDC_COLOR_GREEN1103AFX_IDC_COLOR_BLUE1104AFX_IDC_COLOR_YELLOW1105AFX_IDC_COLOR_MAGENTA1106AFX_IDC_COLOR_CYAN1107AFX_IDC_COLOR_GRAY1108AFX_IDC_COLOR_LIGHTGRAY1109AFX_IDC_COLOR_DARKRED1110AFX_IDC_COLOR_DARKGREEN1111AFX_IDC_COLOR_DARKBLUE1112AFX_IDC_COLOR_LIGHTBROWN1113AFX_IDC_COLOR_DARKMAGENTA1114AFX_IDC_COLOR_DARKCYAN1115AFX_IDC_COLORPROP1116AFX_IDC_SYSTEMCOLORS1117AFX_IDC_PROPNAME1201AFX_IDC_PICTURE1202AFX_IDC_BROWSE1203AFX_IDC_CLEAR1204AFX_IDC_TAB_CONTROL0x3020ID_APPLY_NOW0x3021ID_WIZBACK0x3023ID_WIZNEXT0x3024ID_WIZFINISH0x3025AFX_IDD_NEWTYPEDLG30721AFX_IDD_PRINTDLG30722AFX_IDD_PREVIEW_TOOLBAR30723AFX_IDD_INSERTOBJECT30724AFX_IDD_CHANGEICON30725AFX_IDD_CONVERT30726AFX_IDD_PASTESPECIAL30727AFX_IDD_EDITLINKS30728AFX_IDD_FILEBROWSE30729AFX_IDD_BUSY30730AFX_IDD_OBJECTPROPERTIES30732AFX_IDD_CHANGESOURCE30733AFX_IDD_EMPTYDIALOG30734AFX_IDC_CONTEXTHELP30977AFX_IDC_MAGNIFY30978AFX_IDC_SMALLARROWS30979AFX_IDC_HSPLITBAR30980AFX_IDC_VSPLITBAR30981AFX_IDC_NODROPCRSR30982AFX_IDC_TRACKNWSE30983AFX_IDC_TRACKNESW30984AFX_IDC_TRACKNS30985AFX_IDC_TRACKWE30986AFX_IDC_TRACK4WAY30987AFX_IDC_MOVE4WAY30988AFX_IDB_MINIFRAME_MENU30994AFX_IDB_CHECKLISTBOX_9530996AFX_IDR_PREVIEW_ACCEL30997AFX_IDC_MOUSE_PAN_NW30998AFX_IDC_MOUSE_PAN_N30999AFX_IDC_MOUSE_PAN_NE31000AFX_IDC_MOUSE_PAN_W31001AFX_IDC_MOUSE_PAN_HV31002AFX_IDC_MOUSE_PAN_E31003AFX_IDC_MOUSE_PAN_SW31004AFX_IDC_MOUSE_PAN_S31005AFX_IDC_MOUSE_PAN_SE31006AFX_IDC_MOUSE_PAN_HORZ31007AFX_IDC_MOUSE_PAN_VERT31008AFX_IDC_MOUSE_ORG_HORZ31009AFX_IDC_MOUSE_ORG_VERT31010AFX_IDC_MOUSE_ORG_HV31011AFX_IDC_MOUSE_MASK31012AFX_IDI_STD_MDIFRAME31233AFX_IDI_STD_FRAME31234AFX_IDD_PROPPAGE_COLOR32257AFX_IDD_PROPPAGE_FONT32258AFX_IDD_PROPPAGE_PICTURE32259AFX_IDB_TRUETYPE32384_APS_NEXT_COMMAND_VALUE32771AFX_IDS_APP_TITLE0xE000AFX_IDS_IDLEMESSAGE0xE001AFX_IDS_HELPMODEMESSAGE0xE002AFX_IDS_APP_TITLE_EMBEDDING0xE003AFX_IDS_COMPANY_NAME0xE004AFX_IDS_OBJ_TITLE_INPLACE0xE005ID_FILE_NEW0xE100ID_FILE_OPEN0xE101ID_FILE_CLOSE0xE102ID_FILE_SAVE0xE103ID_FILE_SAVE_AS0xE104ID_FILE_PAGE_SETUP0xE105ID_FILE_PRINT_SETUP0xE106ID_FILE_PRINT0xE107ID_FILE_PRINT_DIRECT0xE108ID_FILE_PRINT_PREVIEW0xE109ID_FILE_UPDATE0xE10AID_FILE_SAVE_COPY_AS0xE10BID_FILE_SEND_MAIL0xE10CID_FILE_NEW_FRAME0xE10DID_FILE_MRU_FIRST0xE110ID_FILE_MRU_FILE10xE110ID_FILE_MRU_FILE20xE111ID_FILE_MRU_FILE30xE112ID_FILE_MRU_FILE40xE113ID_FILE_MRU_FILE50xE114ID_FILE_MRU_FILE60xE115ID_FILE_MRU_FILE70xE116ID_FILE_MRU_FILE80xE117ID_FILE_MRU_FILE90xE118ID_FILE_MRU_FILE100xE119ID_FILE_MRU_FILE110xE11AID_FILE_MRU_FILE120xE11BID_FILE_MRU_FILE130xE11CID_FILE_MRU_FILE140xE11DID_FILE_MRU_FILE150xE11EID_FILE_MRU_FILE160xE11FID_FILE_MRU_LAST0xE11FID_EDIT_CLEAR0xE120ID_EDIT_CLEAR_ALL0xE121ID_EDIT_COPY0xE122ID_EDIT_CUT0xE123ID_EDIT_FIND0xE124ID_EDIT_PASTE0xE125ID_EDIT_PASTE_LINK0xE126ID_EDIT_PASTE_SPECIAL0xE127ID_EDIT_REPEAT0xE128ID_EDIT_REPLACE0xE129ID_EDIT_SELECT_ALL0xE12AID_EDIT_UNDO0xE12BID_EDIT_REDO0xE12CID_WINDOW_NEW0xE130ID_WINDOW_ARRANGE0xE131ID_WINDOW_CASCADE0xE132ID_WINDOW_TILE_HORZ0xE133ID_WINDOW_TILE_VERT0xE134ID_WINDOW_SPLIT0xE135ID_APP_ABOUT0xE140ID_APP_EXIT0xE141ID_HELP_INDEX0xE142ID_HELP_FINDER0xE143ID_HELP_USING0xE144ID_CONTEXT_HELP0xE145ID_HELP0xE146ID_DEFAULT_HELP0xE147ID_NEXT_PANE0xE150ID_PREV_PANE0xE151ID_FORMAT_FONT0xE160ID_OLE_INSERT_NEW0xE200ID_OLE_EDIT_LINKS0xE201ID_OLE_EDIT_CONVERT0xE202ID_OLE_EDIT_CHANGE_ICON0xE203ID_OLE_EDIT_PROPERTIES0xE204ID_OLE_VERB_FIRST0xE210AFX_ID_PREVIEW_CLOSE0xE300AFX_ID_PREVIEW_NUMPAGE0xE301AFX_ID_PREVIEW_NEXT0xE302AFX_ID_PREVIEW_PREV0xE303AFX_ID_PREVIEW_PRINT0xE304AFX_ID_PREVIEW_ZOOMIN0xE305AFX_ID_PREVIEW_ZOOMOUT0xE306ID_INDICATOR_EXT0xE700ID_INDICATOR_CAPS0xE701ID_INDICATOR_NUM0xE702ID_INDICATOR_SCRL0xE703ID_INDICATOR_OVR0xE704ID_INDICATOR_REC0xE705ID_INDICATOR_KANA0xE706ID_VIEW_TOOLBAR0xE800ID_VIEW_STATUS_BAR0xE801ID_VIEW_REBAR0xE804ID_VIEW_AUTOARRANGE0xE805ID_VIEW_SMALLICON0xE810ID_VIEW_LARGEICON0xE811ID_VIEW_LIST0xE812ID_VIEW_DETAILS0xE813ID_VIEW_LINEUP0xE814ID_VIEW_BYNAME0xE815ID_RECORD_FIRST0xE900ID_RECORD_LAST0xE901ID_RECORD_NEXT0xE902ID_RECORD_PREV0xE903AFX_IDS_SCSIZE0xEF00AFX_IDS_SCMOVE0xEF01AFX_IDS_SCMINIMIZE0xEF02AFX_IDS_SCMAXIMIZE0xEF03AFX_IDS_SCNEXTWINDOW0xEF04AFX_IDS_SCPREVWINDOW0xEF05AFX_IDS_SCCLOSE0xEF06AFX_IDS_SCRESTORE0xEF12AFX_IDS_SCTASKLIST0xEF13AFX_IDS_MDICHILD0xEF1FAFX_IDS_DESKACCESSORY0xEFDAAFX_IDS_OPENFILE0xF000AFX_IDS_SAVEFILE0xF001AFX_IDS_ALLFILTER0xF002AFX_IDS_UNTITLED0xF003AFX_IDS_SAVEFILECOPY0xF004AFX_IDS_PREVIEW_CLOSE0xF005AFX_IDS_UNNAMED_FILE0xF006AFX_IDS_HIDE0xF011AFX_IDP_NO_ERROR_AVAILABLE0xF020AFX_IDS_NOT_SUPPORTED_EXCEPTION0xF021AFX_IDS_RESOURCE_EXCEPTION0xF022AFX_IDS_MEMORY_EXCEPTION0xF023AFX_IDS_USER_EXCEPTION0xF024AFX_IDS_INVALID_ARG_EXCEPTION0xF025AFX_IDS_PRINTONPORT0xF040AFX_IDS_ONEPAGE0xF041AFX_IDS_TWOPAGE0xF042AFX_IDS_PRINTPAGENUM0xF043AFX_IDS_PREVIEWPAGEDESC0xF044AFX_IDS_PRINTDEFAULTEXT0xF045AFX_IDS_PRINTDEFAULT0xF046AFX_IDS_PRINTFILTER0xF047AFX_IDS_PRINTCAPTION0xF048AFX_IDS_PRINTTOFILE0xF049AFX_IDS_OBJECT_MENUITEM0xF080AFX_IDS_EDIT_VERB0xF081AFX_IDS_ACTIVATE_VERB0xF082AFX_IDS_CHANGE_LINK0xF083AFX_IDS_AUTO0xF084AFX_IDS_MANUAL0xF085AFX_IDS_FROZEN0xF086AFX_IDS_ALL_FILES0xF087AFX_IDS_SAVE_MENU0xF088AFX_IDS_UPDATE_MENU0xF089AFX_IDS_SAVE_AS_MENU0xF08AAFX_IDS_SAVE_COPY_AS_MENU0xF08BAFX_IDS_EXIT_MENU0xF08CAFX_IDS_UPDATING_ITEMS0xF08DAFX_IDS_METAFILE_FORMAT0xF08EAFX_IDS_DIB_FORMAT0xF08FAFX_IDS_BITMAP_FORMAT0xF090AFX_IDS_LINKSOURCE_FORMAT0xF091AFX_IDS_EMBED_FORMAT0xF092AFX_IDS_PASTELINKEDTYPE0xF094AFX_IDS_UNKNOWNTYPE0xF095AFX_IDS_RTF_FORMAT0xF096AFX_IDS_TEXT_FORMAT0xF097AFX_IDS_INVALID_CURRENCY0xF098AFX_IDS_INVALID_DATETIME0xF099AFX_IDS_INVALID_DATETIMESPAN0xF09AAFX_IDP_INVALID_FILENAME0xF100AFX_IDP_FAILED_TO_OPEN_DOC0xF101AFX_IDP_FAILED_TO_SAVE_DOC0xF102AFX_IDP_ASK_TO_SAVE0xF103AFX_IDP_FAILED_TO_CREATE_DOC0xF104AFX_IDP_FILE_TOO_LARGE0xF105AFX_IDP_FAILED_TO_START_PRINT0xF106AFX_IDP_FAILED_TO_LAUNCH_HELP0xF107AFX_IDP_INTERNAL_FAILURE0xF108AFX_IDP_COMMAND_FAILURE0xF109AFX_IDP_FAILED_MEMORY_ALLOC0xF10AAFX_IDP_UNREG_DONE0xF10BAFX_IDP_UNREG_FAILURE0xF10CAFX_IDP_DLL_LOAD_FAILED0xF10DAFX_IDP_DLL_BAD_VERSION0xF10EAFX_IDP_PARSE_INT0xF110AFX_IDP_PARSE_REAL0xF111AFX_IDP_PARSE_INT_RANGE0xF112AFX_IDP_PARSE_REAL_RANGE0xF113AFX_IDP_PARSE_STRING_SIZE0xF114AFX_IDP_PARSE_RADIO_BUTTON0xF115AFX_IDP_PARSE_BYTE0xF116AFX_IDP_PARSE_UINT0xF117AFX_IDP_PARSE_DATETIME0xF118AFX_IDP_PARSE_CURRENCY0xF119AFX_IDP_PARSE_GUID0xF11AAFX_IDP_PARSE_TIME0xF11BAFX_IDP_PARSE_DATE0xF11CAFX_IDP_FAILED_INVALID_FORMAT0xF120AFX_IDP_FAILED_INVALID_PATH0xF121AFX_IDP_FAILED_DISK_FULL0xF122AFX_IDP_FAILED_ACCESS_READ0xF123AFX_IDP_FAILED_ACCESS_WRITE0xF124AFX_IDP_FAILED_IO_ERROR_READ0xF125AFX_IDP_FAILED_IO_ERROR_WRITE0xF126AFX_IDP_SCRIPT_ERROR0xF130AFX_IDP_SCRIPT_DISPATCH_EXCEPTION0xF131AFX_IDP_STATIC_OBJECT0xF180AFX_IDP_FAILED_TO_CONNECT0xF181AFX_IDP_SERVER_BUSY0xF182AFX_IDP_BAD_VERB0xF183AFX_IDS_NOT_DOCOBJECT0xF184AFX_IDP_FAILED_TO_NOTIFY0xF185AFX_IDP_FAILED_TO_LAUNCH0xF186AFX_IDP_ASK_TO_UPDATE0xF187AFX_IDP_FAILED_TO_UPDATE0xF188AFX_IDP_FAILED_TO_REGISTER0xF189AFX_IDP_FAILED_TO_AUTO_REGISTER0xF18AAFX_IDP_FAILED_TO_CONVERT0xF18BAFX_IDP_GET_NOT_SUPPORTED0xF18CAFX_IDP_SET_NOT_SUPPORTED0xF18DAFX_IDP_ASK_TO_DISCARD0xF18EAFX_IDP_FAILED_TO_CREATE0xF18FAFX_IDP_FAILED_MAPI_LOAD0xF190AFX_IDP_INVALID_MAPI_DLL0xF191AFX_IDP_FAILED_MAPI_SEND0xF192AFX_IDP_FILE_NONE0xF1A0AFX_IDP_FILE_GENERIC0xF1A1AFX_IDP_FILE_NOT_FOUND0xF1A2AFX_IDP_FILE_BAD_PATH0xF1A3AFX_IDP_FILE_TOO_MANY_OPEN0xF1A4AFX_IDP_FILE_ACCESS_DENIED0xF1A5AFX_IDP_FILE_INVALID_FILE0xF1A6AFX_IDP_FILE_REMOVE_CURRENT0xF1A7AFX_IDP_FILE_DIR_FULL0xF1A8AFX_IDP_FILE_BAD_SEEK0xF1A9AFX_IDP_FILE_HARD_IO0xF1AAAFX_IDP_FILE_SHARING0xF1ABAFX_IDP_FILE_LOCKING0xF1ACAFX_IDP_FILE_DISKFULL0xF1ADAFX_IDP_FILE_EOF0xF1AEAFX_IDP_ARCH_NONE0xF1B0AFX_IDP_ARCH_GENERIC0xF1B1AFX_IDP_ARCH_READONLY0xF1B2AFX_IDP_ARCH_ENDOFFILE0xF1B3AFX_IDP_ARCH_WRITEONLY0xF1B4AFX_IDP_ARCH_BADINDEX0xF1B5AFX_IDP_ARCH_BADCLASS0xF1B6AFX_IDP_ARCH_BADSCHEMA0xF1B7AFX_IDS_OCC_SCALEUNITS_PIXELS0xF1C0AFX_IDS_STATUS_FONT0xF230AFX_IDS_TOOLTIP_FONT0xF231AFX_IDS_UNICODE_FONT0xF232AFX_IDS_MINI_FONT0xF233AFX_IDP_SQL_CONNECT_FAIL0xF281AFX_IDP_SQL_RECORDSET_FORWARD_ONLY0xF282AFX_IDP_SQL_EMPTY_COLUMN_LIST0xF283AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH0xF284AFX_IDP_SQL_ILLEGAL_MODE0xF285AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED0xF286AFX_IDP_SQL_NO_CURRENT_RECORD0xF287AFX_IDP_SQL_NO_ROWS_AFFECTED0xF288AFX_IDP_SQL_RECORDSET_READONLY0xF289AFX_IDP_SQL_SQL_NO_TOTAL0xF28AAFX_IDP_SQL_ODBC_LOAD_FAILED0xF28BAFX_IDP_SQL_DYNASET_NOT_SUPPORTED0xF28CAFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED0xF28DAFX_IDP_SQL_API_CONFORMANCE0xF28EAFX_IDP_SQL_SQL_CONFORMANCE0xF28FAFX_IDP_SQL_NO_DATA_FOUND0xF290AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED0xF291AFX_IDP_SQL_ODBC_V2_REQUIRED0xF292AFX_IDP_SQL_NO_POSITIONED_UPDATES0xF293AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED0xF294AFX_IDP_SQL_DATA_TRUNCATED0xF295AFX_IDP_SQL_ROW_FETCH0xF296AFX_IDP_SQL_INCORRECT_ODBC0xF297AFX_IDP_SQL_UPDATE_DELETE_FAILED0xF298AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED0xF299AFX_IDP_SQL_FIELD_NOT_FOUND0xF29AAFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED0xF29BAFX_IDP_SQL_BOOKMARKS_NOT_ENABLED0xF29CAFX_IDS_DELETED0xF29DAFX_IDP_DAO_ENGINE_INITIALIZATION0xF2B0AFX_IDP_DAO_DFX_BIND0xF2B1AFX_IDP_DAO_OBJECT_NOT_OPEN0xF2B2AFX_IDP_DAO_ROWTOOSHORT0xF2B3AFX_IDP_DAO_BADBINDINFO0xF2B4AFX_IDP_DAO_COLUMNUNAVAILABLE0xF2B5AFX_IDS_HTTP_TITLE0xF2D1AFX_IDS_HTTP_NO_TEXT0xF2D2AFX_IDS_HTTP_BAD_REQUEST0xF2D3AFX_IDS_HTTP_AUTH_REQUIRED0xF2D4AFX_IDS_HTTP_FORBIDDEN0xF2D5AFX_IDS_HTTP_NOT_FOUND0xF2D6AFX_IDS_HTTP_SERVER_ERROR0xF2D7AFX_IDS_HTTP_NOT_IMPLEMENTED0xF2D8AFX_IDS_CHECKLISTBOX_UNCHECK0xF2E1AFX_IDS_CHECKLISTBOX_CHECK0xF2E2AFX_IDS_CHECKLISTBOX_MIXED0xF2E3AFX_IDS_PROPPAGE_UNKNOWN0xFE01AFX_IDS_COLOR_DESKTOP0xFE04AFX_IDS_COLOR_APPWORKSPACE0xFE05AFX_IDS_COLOR_WNDBACKGND0xFE06AFX_IDS_COLOR_WNDTEXT0xFE07AFX_IDS_COLOR_MENUBAR0xFE08AFX_IDS_COLOR_MENUTEXT0xFE09AFX_IDS_COLOR_ACTIVEBAR0xFE0AAFX_IDS_COLOR_INACTIVEBAR0xFE0BAFX_IDS_COLOR_ACTIVETEXT0xFE0CAFX_IDS_COLOR_INACTIVETEXT0xFE0DAFX_IDS_COLOR_ACTIVEBORDER0xFE0EAFX_IDS_COLOR_INACTIVEBORDER0xFE0FAFX_IDS_COLOR_WNDFRAME0xFE10AFX_IDS_COLOR_SCROLLBARS0xFE11AFX_IDS_COLOR_BTNFACE0xFE12AFX_IDS_COLOR_BTNSHADOW0xFE13AFX_IDS_COLOR_BTNTEXT0xFE14AFX_IDS_COLOR_BTNHIGHLIGHT0xFE15AFX_IDS_COLOR_DISABLEDTEXT0xFE16AFX_IDS_COLOR_HIGHLIGHT0xFE17AFX_IDS_COLOR_HIGHLIGHTTEXT0xFE18AFX_IDS_REGULAR0xFE19AFX_IDS_BOLD0xFE1AAFX_IDS_ITALIC0xFE1BAFX_IDS_BOLDITALIC0xFE1CAFX_IDS_SAMPLETEXT0xFE1DAFX_IDS_DISPLAYSTRING_FONT0xFE1EAFX_IDS_DISPLAYSTRING_COLOR0xFE1FAFX_IDS_DISPLAYSTRING_PICTURE0xFE20AFX_IDS_PICTUREFILTER0xFE21AFX_IDS_PICTYPE_UNKNOWN0xFE22AFX_IDS_PICTYPE_NONE0xFE23AFX_IDS_PICTYPE_BITMAP0xFE24AFX_IDS_PICTYPE_METAFILE0xFE25AFX_IDS_PICTYPE_ICON0xFE26AFX_IDS_COLOR_PPG0xFE28AFX_IDS_COLOR_PPG_CAPTION0xFE29AFX_IDS_FONT_PPG0xFE2AAFX_IDS_FONT_PPG_CAPTION0xFE2BAFX_IDS_PICTURE_PPG0xFE2CAFX_IDS_PICTURE_PPG_CAPTION0xFE2DAFX_IDS_PICTUREBROWSETITLE0xFE30AFX_IDS_BORDERSTYLE_00xFE31AFX_IDS_BORDERSTYLE_10xFE32AFX_IDS_VERB_EDIT0xFE40AFX_IDS_VERB_PROPERTIES0xFE41AFX_IDP_PICTURECANTOPEN0xFE83AFX_IDP_PICTURECANTLOAD0xFE84AFX_IDP_PICTURETOOLARGE0xFE85AFX_IDP_PICTUREREADFAILED0xFE86AFX_IDP_E_ILLEGALFUNCTIONCALL0xFEA0AFX_IDP_E_OVERFLOW0xFEA1AFX_IDP_E_OUTOFMEMORY0xFEA2AFX_IDP_E_DIVISIONBYZERO0xFEA3AFX_IDP_E_OUTOFSTRINGSPACE0xFEA4AFX_IDP_E_OUTOFSTACKSPACE0xFEA5AFX_IDP_E_BADFILENAMEORNUMBER0xFEA6AFX_IDP_E_FILENOTFOUND0xFEA7AFX_IDP_E_BADFILEMODE0xFEA8AFX_IDP_E_FILEALREADYOPEN0xFEA9AFX_IDP_E_DEVICEIOERROR0xFEAAAFX_IDP_E_FILEALREADYEXISTS0xFEABAFX_IDP_E_BADRECORDLENGTH0xFEACAFX_IDP_E_DISKFULL0xFEADAFX_IDP_E_BADRECORDNUMBER0xFEAEAFX_IDP_E_BADFILENAME0xFEAFAFX_IDP_E_TOOMANYFILES0xFEB0AFX_IDP_E_DEVICEUNAVAILABLE0xFEB1AFX_IDP_E_PERMISSIONDENIED0xFEB2AFX_IDP_E_DISKNOTREADY0xFEB3AFX_IDP_E_PATHFILEACCESSERROR0xFEB4AFX_IDP_E_PATHNOTFOUND0xFEB5AFX_IDP_E_INVALIDPATTERNSTRING0xFEB6AFX_IDP_E_INVALIDUSEOFNULL0xFEB7AFX_IDP_E_INVALIDFILEFORMAT0xFEB8AFX_IDP_E_INVALIDPROPERTYVALUE0xFEB9AFX_IDP_E_INVALIDPROPERTYARRAYINDEX0xFEBAAFX_IDP_E_SETNOTSUPPORTEDATRUNTIME0xFEBBAFX_IDP_E_SETNOTSUPPORTED0xFEBCAFX_IDP_E_NEEDPROPERTYARRAYINDEX0xFEBDAFX_IDP_E_SETNOTPERMITTED0xFEBEAFX_IDP_E_GETNOTSUPPORTEDATRUNTIME0xFEBFAFX_IDP_E_GETNOTSUPPORTED0xFEC0AFX_IDP_E_PROPERTYNOTFOUND0xFEC1AFX_IDP_E_INVALIDCLIPBOARDFORMAT0xFEC2AFX_IDP_E_INVALIDPICTURE0xFEC3AFX_IDP_E_PRINTERERROR0xFEC4AFX_IDP_E_CANTSAVEFILETOTEMP0xFEC5AFX_IDP_E_SEARCHTEXTNOTFOUND0xFEC6AFX_IDP_E_REPLACEMENTSTOOLONG0xFEC7IDC_STATIC-1 4TEXTINCLUDE0 resource.h4TEXTINCLUDE0 #include "afxres.h" t4TEXTINCLUDE0 #define _AFX_NO_SPLITTER_RESOURCES #define _AFX_NO_OLE_RESOURCES #define _AFX_NO_TRACKER_RESOURCES #define _AFX_NO_PROPERTY_RESOURCES #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE 9, 1 #pragma code_page(1252) #include "res\TestDD.rc2" // non-Microsoft Visual C++ edited resources #include "afxres.rc" // Standard components #endif h  (0`wwwwwwwwwwwwwwwwwwwwww׈wwwwwwwwwwwwwwwwwwwwwwxxx}׈xxx}wwwwwww}}}}}}}}}}}}}}}}}wwwwwwwwwww}׈x}wwwwwwww݀??  ( @wwwwwwwwwwwwww׈wwwwwwwwwwwwwwxx}׈xxx}www}}}}}}}}}wwwwwww}׈x}wwww݀?(  ( wwwwwww}x}x}x}x}x}x}x}wwwwwww}ׇw}ׁׁׁ׈wwwwݨ  (0`wXkqN]tno0-1-6-˭ymC,B,w:"o\hP]>te=ggrlgNɓbћit5u6ˑXČV۰̯À5ˎI٦nڧo仐Á6dž:ʋ=ȋAغˌ=ݭlܭpޱw彉ղʌ7ΗF{Ҩ~Ȋ'۩]Ϡ޸ڤJ֡بڭ۰ݴ١/͊ώєҖӚ՟ץmz˃N]:IH\OUJI=cY\ULGa]gcqmjernyvnkQOWV|z‰Ďǔȕʚ˝ə̞̟ΤհܾЩִںL]dn“@b~ϧֶ>88+/h\^}qq[`//"QRT$1=>>8+2j\^sccy\`2/"OQ$%=>>*2i\^sccy\a//"NO66**L=>(2i\]~rccy\a//"WNFTHI*++LL=(/h\^|~rccs\`//'VWRFTHJCDKLL)2j\]x|~rccp~\_//'VVQRFTHJCDKL(/i\^wx|~pcccccb\`//'UVOQRFGHJCDK(/i\]wwx|pcckrss\a//0UUNOQRSGHIJD(2i\^vwwxpccr\`///YUWNOQRFTHIJ)/j\]uvwwmccp\`//9YYVWNO5;*THI)2j\]uuvwmccp\a//9XYVVWNSTH)2i\]ouuvmccbbbbbs\a//@XX0RST)/i\]oouulefffggkt\`/2@ZXX:;NPRF(/h\]loouuvwwx|~\_2/@ZZXXYYUUUVWNOPQ(/i\]ffggkkqqqzzz{{{\_//?MMMMEEEAAAA33452i\\\\\\\\\\\\\\\\\\\`//&&&&&--&&&&-&&&&./illlllllll##"      пѻ  пҿ ǿ ĭѻѬĮĮпĮдĭϳγι͹ƹĮ̸˷հ®ŭᨼ켨켼ǻ??  ( @nPhixѶҷ1-ŦvyufbJƝŜO1aAgO`>eDl™d=iIŽpȢַd8hEsrHg͹ˆXOດȧÀ5ĝĄ:ʋ=ݰzԶˌ=ҚSܭn澋ݿΐ;ҘH۩^仁ȗі;qӦٲ۸ݩL߯_ب֩ڭ۰߹٢5͊ѕӚԟj̅ؠL3_s-GCBHBvBuAuBvD7m3eH%0_J.M5>w+I4D2P=F9I=J=TGf[MEaYg^og`Zf_rld`ytzuqqn~ƔŎșʞ̞ʙ̞˞ΥҩٷںܾԱ׿|ʣЭطZ7s8t5uX^d3Zz#$$8?IS\b*>Z~##$WpWo/38<Xe`dlstyTryyhz@sGxv6gDrKvNxU8^j}!9,']ZZZZZZZZZZZWV-1---------1-\gmV2.AHBC5D;<<(-^iz|kV2.P:#!!+=>(-\ecokV239 $=(-]e{cokV73@ GJ'0<(-^e~xcokV78@ OGJKD;*1]d}~wca``kV78F OOGJKD*1\dy}rch{kV7EF MNOGIK/1\buyrcjkV?EE RR.#:I/-[btuncfssvkV?LE&%"9G41]_ptqhhhjjkV?LTE@NO41]_mptuy}~lV6SUTTQQQRRN91[WXXXYXXYXYYWV-)))))))))),,$ ſ ū ˷ʪڪٶ׶ֽսԼϮ󹺺ū¿?h  ( uVhtzԷ™T,d<ڼʔrʔsd6c6YŠ`ϛoˆU֡qաp֢qݱҘXҙYԟeӞȅIӜYҙXӚQӛQȈ)Ȍ7ȔݾЖ8ї<Ҙ?Çٲҟצ_s-C<<==.ECK2LPV.$ E@J3MOU.  !D?H31IT.-,%B;G1JKS.( ) *E9A011R.&#++E/4678:."&' NQWhX^XXXe rpqt}~]mv\l{[izZjywYdjklnocsgba`_f|ux||||d}caV7 GJ*1dychV7 OG/1  (0` # # # # # # # #! # #! #! # # # # # # # #gdc # # #! # # # # # # # # # # # # # # # # #BuAuBvBvBvBvAuAuBvBvAuBuBvBvBvBvAuAuBv! #o3t5t5t5t5t5t5t5t5t6t5t5u6t5t5t5t6t5t5t5! #! #aZIIIIHIIHIIIIIHHHIIIBvʋ=ʋ=ˌ=ʋ=ʋ=ʋ=ˋ=ˋ=ʋ=ʋ=ʋ=ʋ=ˋ=ʋ=ʋ=ˌ=ʋ=ʋ=ˌ=ʋ=lR! #aYIHRΗFd7d8d9dHRZ`invyʁˆ΍єҙڦnʋ=lS! #bZH=zB2D4E9F:H?H@KDLHNJQOROUSVUWWYZM^IBuʋ=ˌ=~؟!ؠ*٢6٢;٣CڥKڦPڧWۨZ۪`۪c۬jݭnݮqݰwҙ`ˌ=lR! #bZIIIIIIHHIHIIHHIIIHHAuˌ=ˌ=À5Á5À5À5À5À5€5À5Á5À5Á5À5Á5Á5À5À5dž:ʋ=lR! #~T>jZfWeVaS`Q]OZLZK@b;wi=ua=ua=ua=uanglq,,,,2#4@egdc$s$;kcgm,,,,1$4@egdc%s#:j_cg"=, 9y!:, 91#5@fgdc%t$8iZ_cgmqv{1#5Afgdc$s$0[FHLQSY[_aehjoqum.#5@egdc%s$$$###$#$$$$#$##$##$5@fgdc8w##$$#$#$$$##$##$$##$Xf\{|vkkh\{qvh\{h\{ąxxttqommkkkh??  ( @ # # # # # # # # # # # # # # # # # # # # # # # # # #BL@BM@BM@BL@BL@BL@BL@BM@CMABM@BL@BL@ #w\Rv\Rw]Sw\Rw\Rw\Sv\Rv\Rw\Rw]Sw]Sw]StYQ1-/ #AuHIHHHHHIHHHI_s-ʋ=ˌ=ˋ=ʋ=ʋ=ˌ=ʋ=ˋ=ʋ=ˌ=ˌ=ʋ=t6REE #BuI5|ҭ׵ظܿŷͺPF_s-ӛVݯ}Ԧթٳ۷޿ťt6RDD #AuP=˝ҩʞqnI<_s-ӚTݰyԟɘknrsʬt5REE #BvN8ɘ̞0_OH۾I=^s,ҚQݮp彂aAL.hEiJX7bIεȧt5RDE #BvM6Ŏʙ0`LDڻ۾I=_s-ҙM۫kq1.fHب۰ດÍqԶǤu6RDD #AuK2Ŏ~y0_LDհٸܾI=_s-ҙK۩_l1.fFӜب۰şʋ=REE #BvJ.~yt0_3f6l6mÔܾI=^s,ҙFܪ]b1.dCҗӛةۯߺěˌ=REE #AuI+uq}rj0_E5Υط۾I=_s-їEڦP߯]1-eA͊ҕӜب٭ߺʋ=SEE #BuH'rmuqnf0_G9Ȕ̞ҩԯٷI=_s-ї>٥IެQ0-d=ʃ̇ޱxŠcȘڭʋ=REE #BuG!f_rmf[0_>w+^Wa\c_ȚԮI=^s,җ=٢<ݪHB,T4OˆXrHa?㸀ب彊ʋ=REE #BuFaXg_g]B.D3D4G8G:ΤI=_s-і7١/HMc6d8d;e?vѕӛ澊ˌ=SEE #BvCWHbYf^pkuq}ōǔ̞I<^s,ΐ;ؠ2GV_lt˃ˇє廂ʋ=SEE #AuFBCCCCBCCBCG_s-ʋ=À5À5À5À5€5À5Á5Á5À5À5Ń8„;tcc #Ʋ׿ӶͫɢZ5u7t7s7t7t7t3ZzWoWpWpWpWoTriwlÙȡֶ˼˼`#STWY[^_ccf]$vWjuezƦֶd$$pM\gOzl}r\$6_,U܏,!9$XBecX|tzly$9\;ki,#4@ey#Nx2cd',$?Ruz$yJv,$CXzy#rxGta,,$CXzy$krDr(t!:,#CYzy#clAoJvԇ,,$CXzy$^eAs,Gxۂ,,#BXzz#V`eltyls#CXzz$/034578;<=<$CY{=[WTQMHE?=86+s}}_˘}_˘࠸؛؛؛؛؛؛ؘ?h   ( GI=J=I=I=I=_s-̏IҘXҘXҙYҘXҙY|Xfdcd`ѩ;w _s-ԞdȔd7d6ޫZgec]U˜;w ۽и_s-ӜYc6Zݰʔr˫ZfdcXO;w _s-LJ)і9җ<ԛQӜYӞe\փԹv,i;z;z;z;zP 0  C" V%+.#uPuQ -"-% X#Z+( d0 Ȁ7About TestDDMS Shell DlgP P( wTestDD Version 1.0P(wCopyright (C) 2005P2OK0 0 04VS_VERSION_INFO?StringFileInfol040904e4JCompanyNameTODO: <Company name>ZFileDescriptionTODO: <File description>0FileVersion1.0.0.16 InternalNameTestDD.exe0LegalCopyrightTODO: (c) <Company name>. All rights reserved.> OriginalFilenameTestDD.exeJProductNameTODO: <Product name>4ProductVersion1.0.0.1DVarFileInfo$Translation HDDESIGNINFOGUIDELINES0 d 0EG0 0  Your app description here ,  0 TestDD6 0 TestDDReadyF q0 EXTCAPNUMSCRLOVRREC 0 ?Display program information, version number and copyright About4Quit the application; prompts to save documents Exit 0 (Switch to the next window pane Next Pane5Switch back to the previous window pane Previous Panep 0 (Split the active window into panes Split( 0 Erase the selection EraseErase everything Erase All3Copy the selection and put it on the Clipboard Copy1Cut the selection and put it on the Clipboard CutFind the specified text FindInsert Clipboard contents PasteRepeat the last action Repeat1Replace specific text with different text Replace%Select the entire document Select AllUndo the last action Undo&Redo the previously undone action Redo 0 'Show or hide the toolbar Toggle ToolBar,Show or hide the status bar Toggle StatusBar 0 Change the window sizeChange the window positionReduce the window to an iconEnlarge the window to full size"Switch to the next document window&Switch to the previous document window9Close the active window and prompts to save the documents 0 !Restore the window to normal sizeActivate Task List<$HWBfDHWB (BHWB0 CHWB0  CHWB0 MHWB/0 2OHWB-0 &?@QHWB.0  TEXTINCLUDE0 ܐTEXTINCLUDE0 t(TEXTINCLUDE0 h D (L  \ h$   t h<  0 Hh0 0 L0 Pp 0 (d0 0(0 HDESIGNINFOGUIDELINES0 0 , 0 6(0 Fq0 0 0 p 0 (0 0 0 0 PK ;3^ testDD/TestDD.cpp// TestDD.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "TestDD.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CTestDDApp BEGIN_MESSAGE_MAP(CTestDDApp, CWinApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) END_MESSAGE_MAP() // CTestDDApp construction CTestDDApp::CTestDDApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } // The one and only CTestDDApp object CTestDDApp theApp; // CTestDDApp initialization BOOL CTestDDApp::InitInstance() { // InitCommonControls() is required on Windows XP if an application // manifest specifies use of ComCtl32.dll version 6 or later to enable // visual styles. Otherwise, any window creation will fail. InitCommonControls(); CWinApp::InitInstance(); // Initialize OLE libraries if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need // Change the registry key under which our settings are stored // TODO: You should modify this string to be something appropriate // such as the name of your company or organization SetRegistryKey(_T("Local AppWizard-Generated Applications")); // To create the main window, this code creates a new frame window // object and then sets it as the application's main window object CMainFrame* pFrame = new CMainFrame; m_pMainWnd = pFrame; // create and load the frame with its resources pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); // The one and only window has been initialized, so show and update it pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); // call DragAcceptFiles only if there's a suffix // In an SDI app, this should occur after ProcessShellCommand return TRUE; } // CTestDDApp message handlers // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // App command to run the dialog void CTestDDApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } // CTestDDApp message handlers PK ;3LtestDD/TestDD.h// TestDD.h : main header file for the TestDD application // #pragma once #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include "resource.h" // main symbols // CTestDDApp: // See TestDD.cpp for the implementation of this class // class CTestDDApp : public CWinApp { public: CTestDDApp(); // Overrides public: virtual BOOL InitInstance(); // Implementation public: afx_msg void OnAppAbout(); DECLARE_MESSAGE_MAP() }; extern CTestDDApp theApp;PK *y"~T~TtestDD/TestDD.ico 00h ( 00 h^"00'  nDhQ(0`wwwwwwwwwwwwwwwwwwwwww׈wwwwwwwwwwwwwwwwwwwwwwxxx}׈xxx}wwwwwww}}}}}}}}}}}}}}}}}wwwwwwwwwww}׈x}wwwwwwww݀??( @wwwwwwwwwwwwww׈wwwwwwwwwwwwwwxx}׈xxx}www}}}}}}}}}wwwwwww}׈x}wwww݀?( wwwwwww}x}x}x}x}x}x}x}wwwwwww}ׇw}ׁׁׁ׈wwww(0`wXkqN]tno0-1-6-˭ymC,B,w:"o\hP]>te=ggrlgNɓbћit5u6ˑXČV۰̯À5ˎI٦nڧo仐Á6dž:ʋ=ȋAغˌ=ݭlܭpޱw彉ղʌ7ΗF{Ҩ~Ȋ'۩]Ϡ޸ڤJ֡بڭ۰ݴ١/͊ώєҖӚ՟ץmz˃N]:IH\OUJI=cY\ULGa]gcqmjernyvnkQOWV|z‰Ďǔȕʚ˝ə̞̟ΤհܾЩִںL]dn“@b~ϧֶ>88+/h\^}qq[`//"QRT$1=>>8+2j\^sccy\`2/"OQ$%=>>*2i\^sccy\a//"NO66**L=>(2i\]~rccy\a//"WNFTHI*++LL=(/h\^|~rccs\`//'VWRFTHJCDKLL)2j\]x|~rccp~\_//'VVQRFTHJCDKL(/i\^wx|~pcccccb\`//'UVOQRFGHJCDK(/i\]wwx|pcckrss\a//0UUNOQRSGHIJD(2i\^vwwxpccr\`///YUWNOQRFTHIJ)/j\]uvwwmccp\`//9YYVWNO5;*THI)2j\]uuvwmccp\a//9XYVVWNSTH)2i\]ouuvmccbbbbbs\a//@XX0RST)/i\]oouulefffggkt\`/2@ZXX:;NPRF(/h\]loouuvwwx|~\_2/@ZZXXYYUUUVWNOPQ(/i\]ffggkkqqqzzz{{{\_//?MMMMEEEAAAA33452i\\\\\\\\\\\\\\\\\\\`//&&&&&--&&&&-&&&&./illlllllll##"      пѻ  пҿ ǿ ĭѻѬĮĮпĮдĭϳγι͹ƹĮ̸˷հ®ŭᨼ켨켼ǻ??( @nPhixѶҷ1-ŦvyufbJƝŜO1aAgO`>eDl™d=iIŽpȢַd8hEsrHg͹ˆXOດȧÀ5ĝĄ:ʋ=ݰzԶˌ=ҚSܭn澋ݿΐ;ҘH۩^仁ȗі;qӦٲ۸ݩL߯_ب֩ڭ۰߹٢5͊ѕӚԟj̅ؠL3_s-GCBHBvBuAuBvD7m3eH%0_J.M5>w+I4D2P=F9I=J=TGf[MEaYg^og`Zf_rld`ytzuqqn~ƔŎșʞ̞ʙ̞˞ΥҩٷںܾԱ׿|ʣЭطZ7s8t5uX^d3Zz#$$8?IS\b*>Z~##$WpWo/38<Xe`dlstyTryyhz@sGxv6gDrKvNxU8^j}!9,']ZZZZZZZZZZZWV-1---------1-\gmV2.AHBC5D;<<(-^iz|kV2.P:#!!+=>(-\ecokV239 $=(-]e{cokV73@ GJ'0<(-^e~xcokV78@ OGJKD;*1]d}~wca``kV78F OOGJKD*1\dy}rch{kV7EF MNOGIK/1\buyrcjkV?EE RR.#:I/-[btuncfssvkV?LE&%"9G41]_ptqhhhjjkV?LTE@NO41]_mptuy}~lV6SUTTQQQRRN91[WXXXYXXYXYYWV-)))))))))),,$ ſ ū ˷ʪڪٶ׶ֽսԼϮ󹺺ū¿?( uVhtzԷ™T,d<ڼʔrʔsd6c6YŠ`ϛoˆU֡qաp֢qݱҘXҙYԟeӞȅIӜYҙXӚQӛQȈ)Ȍ7ȔݾЖ8ї<Ҙ?Çٲҟצ_s-C<<==.ECK2LPV.$ E@J3MOU.  !D?H31IT.-,%B;G1JKS.( ) *E9A011R.&#++E/4678:."&' NQWhX^XXXe rpqt}~]mv\l{[izZjywYdjklnocsgba`_f|ux||||d}caV7 GJ*1dychV7 OG/1(0` # # # # # # # #! # #! #! # # # # # # # #gdc # # #! # # # # # # # # # # # # # # # # #BuAuBvBvBvBvAuAuBvBvAuBuBvBvBvBvAuAuBv! #o3t5t5t5t5t5t5t5t5t6t5t5u6t5t5t5t6t5t5t5! #! #aZIIIIHIIHIIIIIHHHIIIBvʋ=ʋ=ˌ=ʋ=ʋ=ʋ=ˋ=ˋ=ʋ=ʋ=ʋ=ʋ=ˋ=ʋ=ʋ=ˌ=ʋ=ʋ=ˌ=ʋ=lR! #aYIHRΗFd7d8d9dHRZ`invyʁˆ΍єҙڦnʋ=lS! #bZH=zB2D4E9F:H?H@KDLHNJQOROUSVUWWYZM^IBuʋ=ˌ=~؟!ؠ*٢6٢;٣CڥKڦPڧWۨZ۪`۪c۬jݭnݮqݰwҙ`ˌ=lR! #bZIIIIIIHHIHIIHHIIIHHAuˌ=ˌ=À5Á5À5À5À5À5€5À5Á5À5Á5À5Á5Á5À5À5dž:ʋ=lR! #~T>jZfWeVaS`Q]OZLZK@b;wi=ua=ua=ua=uanglq,,,,2#4@egdc$s$;kcgm,,,,1$4@egdc%s#:j_cg"=, 9y!:, 91#5@fgdc%t$8iZ_cgmqv{1#5Afgdc$s$0[FHLQSY[_aehjoqum.#5@egdc%s$$$###$#$$$$#$##$##$5@fgdc8w##$$#$#$$$##$##$$##$Xf\{|vkkh\{qvh\{h\{ąxxttqommkkkh??( @ # # # # # # # # # # # # # # # # # # # # # # # # # #BL@BM@BM@BL@BL@BL@BL@BM@CMABM@BL@BL@ #w\Rv\Rw]Sw\Rw\Rw\Sv\Rv\Rw\Rw]Sw]Sw]StYQ1-/ #AuHIHHHHHIHHHI_s-ʋ=ˌ=ˋ=ʋ=ʋ=ˌ=ʋ=ˋ=ʋ=ˌ=ˌ=ʋ=t6REE #BuI5|ҭ׵ظܿŷͺPF_s-ӛVݯ}Ԧթٳ۷޿ťt6RDD #AuP=˝ҩʞqnI<_s-ӚTݰyԟɘknrsʬt5REE #BvN8ɘ̞0_OH۾I=^s,ҚQݮp彂aAL.hEiJX7bIεȧt5RDE #BvM6Ŏʙ0`LDڻ۾I=_s-ҙM۫kq1.fHب۰ດÍqԶǤu6RDD #AuK2Ŏ~y0_LDհٸܾI=_s-ҙK۩_l1.fFӜب۰şʋ=REE #BvJ.~yt0_3f6l6mÔܾI=^s,ҙFܪ]b1.dCҗӛةۯߺěˌ=REE #AuI+uq}rj0_E5Υط۾I=_s-їEڦP߯]1-eA͊ҕӜب٭ߺʋ=SEE #BuH'rmuqnf0_G9Ȕ̞ҩԯٷI=_s-ї>٥IެQ0-d=ʃ̇ޱxŠcȘڭʋ=REE #BuG!f_rmf[0_>w+^Wa\c_ȚԮI=^s,җ=٢<ݪHB,T4OˆXrHa?㸀ب彊ʋ=REE #BuFaXg_g]B.D3D4G8G:ΤI=_s-і7١/HMc6d8d;e?vѕӛ澊ˌ=SEE #BvCWHbYf^pkuq}ōǔ̞I<^s,ΐ;ؠ2GV_lt˃ˇє廂ʋ=SEE #AuFBCCCCBCCBCG_s-ʋ=À5À5À5À5€5À5Á5Á5À5À5Ń8„;tcc #Ʋ׿ӶͫɢZ5u7t7s7t7t7t3ZzWoWpWpWpWoTriwlÙȡֶ˼˼`#STWY[^_ccf]$vWjuezƦֶd$$pM\gOzl}r\$6_,U܏,!9$XBecX|tzly$9\;ki,#4@ey#Nx2cd',$?Ruz$yJv,$CXzy#rxGta,,$CXzy$krDr(t!:,#CYzy#clAoJvԇ,,$CXzy$^eAs,Gxۂ,,#BXzz#V`eltyls#CXzz$/034578;<=<$CY{=[WTQMHE?=86+s}}_˘}_˘࠸؛؛؛؛؛؛ؘ?( GI=J=I=I=I=_s-̏IҘXҘXҙYҘXҙY|Xfdcd`ѩ;w _s-ԞdȔd7d6ޫZgec]U˜;w ۽и_s-ӜYc6Zݰʔr˫ZfdcXO;w _s-LJ)і9җ<ԛQӜYӞe\փԹv,i;z;z;z;z Your app description here PK VH{6Z¥)="="testDD/TestDD.rc// Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "#define _AFX_NO_SPLITTER_RESOURCES\r\n" "#define _AFX_NO_OLE_RESOURCES\r\n" "#define _AFX_NO_TRACKER_RESOURCES\r\n" "#define _AFX_NO_PROPERTY_RESOURCES\r\n" "\r\n" "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" "LANGUAGE 9, 1\r\n" "#pragma code_page(1252)\r\n" "#include ""res\\TestDD.rc2"" // non-Microsoft Visual C++ edited resources\r\n" "#include ""afxres.rc"" // Standard components\r\n" "#endif\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDR_MAINFRAME ICON "res\\TestDD.ico" ///////////////////////////////////////////////////////////////////////////// // // Bitmap // IDR_MAINFRAME BITMAP "res\\Toolbar.bmp" ///////////////////////////////////////////////////////////////////////////// // // Toolbar // IDR_MAINFRAME TOOLBAR 16, 15 BEGIN BUTTON ID_EDIT_CUT BUTTON ID_EDIT_COPY BUTTON ID_EDIT_PASTE SEPARATOR BUTTON ID_APP_ABOUT END ///////////////////////////////////////////////////////////////////////////// // // Menu // IDR_MAINFRAME MENU BEGIN POPUP "&Test" BEGIN MENUITEM "Run Test", ID_TEST_RUNTEST MENUITEM "", ID_TEST_2 END END ///////////////////////////////////////////////////////////////////////////// // // Accelerator // IDR_MAINFRAME ACCELERATORS BEGIN "C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT "V", ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT, NOINVERT VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT VK_F6, ID_NEXT_PANE, VIRTKEY, NOINVERT VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT, NOINVERT VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT "X", ID_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT END ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About TestDD" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20 LTEXT "TestDD Version 1.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX LTEXT "Copyright (C) 2005",IDC_STATIC,40,25,119,8 DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP END ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "TODO: " VALUE "FileDescription", "TODO: " VALUE "FileVersion", "1.0.0.1" VALUE "InternalName", "TestDD.exe" VALUE "LegalCopyright", "TODO: (c) . All rights reserved." VALUE "OriginalFilename", "TestDD.exe" VALUE "ProductName", "TODO: " VALUE "ProductVersion", "1.0.0.1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO BEGIN IDD_ABOUTBOX, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 228 TOPMARGIN, 7 BOTTOMMARGIN, 48 END END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // RT_MANIFEST // IDR_MANIFEST RT_MANIFEST "res\\TestDD.manifest" ///////////////////////////////////////////////////////////////////////////// // // String Table // STRINGTABLE BEGIN IDR_MAINFRAME "TestDD" END STRINGTABLE BEGIN AFX_IDS_APP_TITLE "TestDD" AFX_IDS_IDLEMESSAGE "Ready" END STRINGTABLE BEGIN ID_INDICATOR_EXT "EXT" ID_INDICATOR_CAPS "CAP" ID_INDICATOR_NUM "NUM" ID_INDICATOR_SCRL "SCRL" ID_INDICATOR_OVR "OVR" ID_INDICATOR_REC "REC" END STRINGTABLE BEGIN ID_APP_ABOUT "Display program information, version number and copyright\nAbout" ID_APP_EXIT "Quit the application; prompts to save documents\nExit" END STRINGTABLE BEGIN ID_NEXT_PANE "Switch to the next window pane\nNext Pane" ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" END STRINGTABLE BEGIN ID_WINDOW_SPLIT "Split the active window into panes\nSplit" END STRINGTABLE BEGIN ID_EDIT_CLEAR "Erase the selection\nErase" ID_EDIT_CLEAR_ALL "Erase everything\nErase All" ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" ID_EDIT_FIND "Find the specified text\nFind" ID_EDIT_PASTE "Insert Clipboard contents\nPaste" ID_EDIT_REPEAT "Repeat the last action\nRepeat" ID_EDIT_REPLACE "Replace specific text with different text\nReplace" ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" ID_EDIT_UNDO "Undo the last action\nUndo" ID_EDIT_REDO "Redo the previously undone action\nRedo" END STRINGTABLE BEGIN ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar" ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" END STRINGTABLE BEGIN AFX_IDS_SCSIZE "Change the window size" AFX_IDS_SCMOVE "Change the window position" AFX_IDS_SCMINIMIZE "Reduce the window to an icon" AFX_IDS_SCMAXIMIZE "Enlarge the window to full size" AFX_IDS_SCNEXTWINDOW "Switch to the next document window" AFX_IDS_SCPREVWINDOW "Switch to the previous document window" AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents" END STRINGTABLE BEGIN AFX_IDS_SCRESTORE "Restore the window to normal size" AFX_IDS_SCTASKLIST "Activate Task List" END #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // #define _AFX_NO_SPLITTER_RESOURCES #define _AFX_NO_OLE_RESOURCES #define _AFX_NO_TRACKER_RESOURCES #define _AFX_NO_PROPERTY_RESOURCES #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE 9, 1 #pragma code_page(1252) #include "res\TestDD.rc2" // non-Microsoft Visual C++ edited resources #include "afxres.rc" // Standard components #endif ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED PK ;38testDD/TestDD.rc2// // TestDD.RC2 - resources Microsoft Visual C++ does not edit directly // #ifdef APSTUDIO_INVOKED #error this file is not editable by Microsoft Visual C++ #endif //APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // Add manually edited resources here... ///////////////////////////////////////////////////////////////////////////// PK E?6gQYYtestDD/TestDD.vcproj PK a;3@testDD/TestDD.vcproj.vspscc"" { "FILE_VERSION" = "9237" "ENLISTMENT_CHOICE" = "NEVER" "PROJECT_FILE_RELATIVE_PATH" = "relative:TestDD" "NUMBER_OF_EXCLUDED_FILES" = "0" "ORIGINAL_PROJECT_FILE_PATH" = "" "NUMBER_OF_NESTED_PROJECTS" = "0" "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" } PK M6ЕV%testDD/TestDD.vcproj.ZID1.zidanf.user PK &u)FաVVtestDD/Toolbar.bmpBMVv(@wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwpwwwpwwwwwpwwwwwwpwwww wwwwppwwwwwppwww wwwwppwwwwwppwwwpwwwwwppwwppwww wwwwwwppwwppwww wwwwwwpwwwppwww wwwwwwwwwwppwww wwwwwpwwwppwwpwwwwwppwwwpwpwp wwwwpwwpwpwwpwppwwwwwwwpwwwp wp wwwwwwwpwwwww www wwwwwwwwpwwwwwwwwwwwwpwwPK 6testDD/PK 6p testDD/BuildLog.htmPK 6 1testDD/ChildView.cppPK [{6nNX&& }testDD/ChildView.hPK ;3aߧ !(testDD/MainFrm.cppPK ;3ĶI!w3testDD/MainFrm.hPK ;3-[[!)7testDD/ReadMe.txtPK ;5O  !ItestDD/resource.hPK ;3J!NtestDD/stdafx.cppPK %;3<5c!OtestDD/stdafx.hPK VH{6 hHE WtestDD/TestDD.apsPK ;3^ ![testDD/TestDD.cppPK ;3L!ftestDD/TestDD.hPK *y"~T~T!7itestDD/TestDD.icoPK ;39