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レコードセットに格納する方法 †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 † |