Visual C++ 関連情報

Visual C++ 6.0

Visual C++ .NET

Visual Studio 2005

はてなブックマーク

MSDN

MFCに関する情報

コーディング規約

テクニカルノート

スレッド

スレッドの使い方

DOC/View

ドキュメントの新規作成

SDI で Doc/View を使わない方法。

IMPLEMENT_DYNCREATE(CChildView, CListView) // 追加

class CMainFrame : public CFrameWnd {

   CChildView* m_pWndView;

};

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {

   if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
       return -1;

/*

   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;
   }

/

   m_pWndView = (CChildView*)RUNTIME_CLASS(CChildView)->CreateObject();
   if (!m_pWndView->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;
   }

}

#end また、以下の方法でも可能らしい。

#code c++ void CChildView::PostNcDestroy() {

   CWnd::PostNcDestroy();

}

#end

シリアライズ

オーナー描画(Owner Draw)に関する情報

MFCアプリケーションの仕組み

タイトルの「無題」を変更する方法。

CodeGuru - Visual C++

Controls

Data

Windows

Tools

COMに関する情報

コンポーネント開発

COMイベント

ActiveX

Insdie OLE のサンプルの場所

構造化ストレージ

ドラッグ&ドロップ

クリップボードに関する情報

ショートカットの作成

シェル拡張

特殊フォルダ

COM の使い方

Visual Basic

For Visual Basic Developers

Visual C++ Developers (using MFC)

C/C++ Developers (without MFC)

IEコンポーネントの使い方

WMIの使い方

MSXMLの使い方

ADOの使い方

ADOレコードセットを配列として使う方法

#code c++

#include <afx.h>
#include <comdef.h>
#import "C:\Program Files\Common Files\System\Ado\msado15.dll" rename("EOF", "adoEOF")
using namespace ADODB;	// 名前空間
#include <afxdisp.h>	// COleSafeArray
#include <afxtempl.h>	// CArray
typedef CArray< _variant_t, _variant_t& > CVariantArray;

class CSafeVariantArray : public CVariantArray { public:

	operator LPVARIANT()
	{
		VariantArrayToSafeArray();
		return (LPVARIANT)m_sa;
	}

private:

	void VariantArrayToSafeArray()
	{
		COleSafeArray sa;
		int nSize = GetSize();
		sa.CreateOneDim( VT_VARIANT, nSize );
		for ( int i = 0; i < nSize; i++ )
		{
			long lArrayIndex = (long)i;
			_variant_t vValue = GetAt(i);
			sa.PutElement( &lArrayIndex, &vValue );
		}
		m_sa = sa;
		return;
	}
	COleSafeArray	m_sa;

};

/* Sub FieldsAppendTest

   Dim rsTmp
   Set rsTmp = CreateObject("ADODB.Recordset")
   
   With rsTmp.Fields
       .Append "Field1", adVarChar, 80, adFldIsNullable
       .Append "Field2", adVarChar, 80, adFldIsNullable
   End With
   
   rsTmp.Open
   Dim vFieldList
   vFieldList = Array( "Field1", "Field2" )
   Dim vValues
   vValues = Array( "aaa", "bbb" )
   rsTmp.AddNew vFieldList, vValues
   
   vValues = Array( "CCC", "DDD" )
   rsTmp.AddNew vFieldList, vValues
   
   rsTmp.MoveFirst
   
   Dim fld
   Dim strLine
   Dim strName
   strLine = ""
   For Each fld In rsTmp.Fields
       strName = fld.Name
       strLine = strLine & strName & vbTab
   Next
   WScript.Echo strLine
   
   Dim strValue
   While Not rsTmp.BOF And Not rsTmp.EOF
       strLine = ""
       For Each fld In rsTmp.Fields
           strValue = fld.Value
           strLine = strLine & "[" & strValue & "]" & vbTab
       Next
       WScript.Echo strLine
       rsTmp.MoveNext
   Wend

End Sub

/

void FieldsAppendTest() {

	try
	{
		CoInitialize(NULL);
		ADODB::_RecordsetPtr rs;  // Recordsetオブジェクト
		// ADOオブジェクトの生成
		rs.CreateInstance( __uuidof(ADODB::Recordset) );
		rs->Fields->Append( L"Field1", adVarChar, 80, adFldIsNullable );
		rs->Fields->Append( L"Field2", adVarChar, 80, adFldIsNullable );
		rs->Open( vtMissing, vtMissing, adOpenForwardOnly, adLockOptimistic, adCmdUnknown );
		// テーブルのフィールドリスト用の配列を作成します
		CSafeVariantArray vaFieldList;
		vaFieldList.Add( _variant_t( L"Field1" ) );
		vaFieldList.Add( _variant_t( L"Field2" ) );
		CSafeVariantArray vaValues;
		vaValues.Add( _variant_t( L"aaa" ) );
		vaValues.Add( _variant_t( L"bbb" ) );
		// 1レコード目
		rs->AddNew( (LPVARIANT)vaFieldList, (LPVARIANT)vaValues );
		vaValues.RemoveAll();
		vaValues.Add( _variant_t( L"CCC" ) );
		vaValues.Add( _variant_t( L"DDD" ) );
		// 2レコード目
		rs->AddNew( (LPVARIANT)vaFieldList, (LPVARIANT)vaValues );
		rs->MoveFirst();
		long i = 0;
		long nFields = rs->GetFields()->GetCount();
		// 項目名
		for ( i = 0; i < nFields; i++ )
		{
			_bstr_t vName;
			_variant_t vValue;
			vName  = rs->GetFields()->GetItem(i)->GetName();
			_tprintf( _T("%s\t"), (LPCTSTR)vName );
		}
		_tprintf( _T("\n") );
		_tprintf( _T("-------------------------------------------------\n") );
		// レコード表示
		while ( !rs->GetBOF() && !rs->GetadoEOF() )
		{
			for ( i = 0; i < nFields; i++ )
			{
				_variant_t vValue;
				vValue = rs->GetFields()->GetItem(i)->GetValue();
				_tprintf( _T("[%s]\t"), (LPCTSTR)(_bstr_t)vValue );
			}
			_tprintf( _T("\n") );
			rs->MoveNext();
		}
		rs->Close();
	}
	catch ( _com_error& e )
	{
		_tprintf( _T("e.Description = [%s]\n"), (LPCTSTR)e.Description() );
		return;
	}
	catch ( ... )
	{
		_tprintf( _T("Fatal Error!\n") );
		return;
	}
	CoUninitialize();

}

int main( int argc, char* argv[] ) {

	FieldsAppendTest();
	return 0;

}

#end

文字列の配列として COleSafeArray を使うのが味噌らしい。

#code c++

#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
   no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
// Note 1
inline void TESTHR( HRESULT _hr ) 
{
   if FAILED(_hr)
   {
      _com_issue_error(_hr);
   }
}

void main(void)
{
   CoInitialize(NULL);
   try 
   {
      _RecordsetPtr   pRs("ADODB.Recordset");
      _ConnectionPtr  pCn("ADODB.Connection");
      _variant_t      vtTableName("authors"),
                      vtCriteria;
       long            ix[1];
      SAFEARRAY       *pSa = NULL;
    
      pCn->Open("DSN=pubs;User ID=sa;pwd=;Provider=MSDASQL;", "", "", 
                  adConnectUnspecified);
// Note 2, Note 3
      pSa = SafeArrayCreateVector(VT_VARIANT, 1, 4);
      if (!pSa) 
      {
         _com_issue_error(E_OUTOFMEMORY);
      }

// Specify TABLE_NAME in the third array element (index of 2). 

      ix[0] = 2;      
      TESTHR(SafeArrayPutElement(pSa, ix, &vtTableName));

// There is no Variant constructor for a SafeArray, so manually set the 
// type (SafeArray of Variant) and value (pointer to a SafeArray).

      vtCriteria.vt = VT_ARRAY | VT_VARIANT;
      vtCriteria.parray = pSa;

      pRs = pCn->OpenSchema(adSchemaColumns, vtCriteria, vtMissing);

      long limit = pRs->GetFields()->Count;
      for (long x = 0; x < limit; x++)
      {
         printf("%d: %s\n", x+1, ((char*) pRs->GetFields()->Item[x]->Name));
      }
// Note 4
      pRs->Close();
      pCn->Close();
   }
   catch (_com_error &e)
   {
      printf("Error:\n");
      printf("Code = %08lx\n", e.Error());
      printf("Code meaning = %s\n", (char*) e.ErrorMessage());
      printf("Source = %s\n", (char*) e.Source());
      printf("Description = %s\n", (char*) e.Description());
   }
   CoUninitialize();
}

#end

SafeArray 関連情報

INIファイルをADOレコードセットに格納する方法

fileIni2Ado.cpp

CDOの使い方

VBScript.RegExpの使い方

Side-by-Side コンポーネントについて

ATL/WTL に関する情報

ATL

WTL

その他

DLLの作り方

サービスの作り方

ホワイトペーパー

デザインパターン

アクセシビリティ

UI(ユーザーインターフェイス)

コンパイルオプション

cl test.cpp /P

コマンドラインからのビルド

インテリセンス

コンソールアプリでリソースファイルを利用する方法

#code c++

#include "resource.h"

#include "afxres.h"

STRINGTABLE DISCARDABLE BEGIN

   IDS_TEST	"Resource File Test [%s]"

END

#end

#code c++

#define IDS_TEST 1000

#end

#code c++

#include <afx.h>

#include "resource.h"

int main( int argc, char* argv[] ) {

	CString strData;
	strData.Format( IDS_TEST, _T("aaa") );
	_tprintf( _T("strData = [%s]\n"), (LPCTSTR)strData );
	
	return 0;

}

#end

ドキュメント自動生成

セキュアプログラミング

暗号化

Crypto API

CAPICOM

DPAPI

その他

アセンブラ

Windowsハック

アクセシビリティ

コモンダイアログに関する情報

サーバー一覧の取得

MSDN

PocketPC



#access


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS