使用 Visual C++ 2012 中的 MFCApplication 向导,如果选中“生成属性数据库类”,则会生成具有一些特殊语法(属性 C++ 类)的标头,如下所示:
// MFCApplication2Set.h: interface of the CMFCApplication2Set class
//
#pragma once
// code generated on March-05-13, 9:26 AM
[
db_source(L"Provider=SQLNCLI11.1;..."),
db_table(L"dbo.tblEmployee")
]
class CMFCApplication2Set
{
public:
... big list of stuff that corresponds to the fields in your db table omitted ...
}
上面的头文件对应一个大部分为空的实现文件:
// MFCApplication2Set.cpp : implementation of the CMFCApplication2Set class
//
#include "stdafx.h"
#include "MFCApplication2.h"
#include "MFCApplication2Set.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMFCApplication2Set implementation
那是整个实现类。请注意:
A. 没有在任何地方指定父类名称。B. 这里有一些“Visual C++ 魔法”,也就是说,作为现代 C++ 的新手,我迷路了。
db_source
记录在这里,但文档很薄,或者至少对我来说是不透明的。
问题:
当我第一次看到它时,我被这个语法迷住了,但我发现它可能是Visual C++中这个属性特性的一个变体。就是这样,对吧?
我打算如何使用这些生成的“属性数据库类”对象?我找到了这个文档,但是如果您仔细查看该文档,该代码示例向人们展示了旧方式和新方式,并没有告诉我我想知道什么是如何使用 IDE 无法使用的这个新对象给我任何文档或代码完成功能。此外,由于生成的代码
CMFCApplication2Set
向导生成的类没有引用任何类型或类名,我迷路了。如果我什至可以使用一些 IDE 功能来知道什么方法和东西被神奇地注入了这个神奇的神秘对象,我会更好。我能想到的唯一想法就是学习旧方法并从旧的两个分离的 ATL 类型世界中学习所有可以调用的东西,然后以某种方式学习将它们组合起来。
简而言之,我正在寻找实际使用其中一个属性数据库类实例(变量)所需了解的最低语法,因为它们是由向导在新的 MFC 应用程序中生成的。下面显示的实例是 MFC 文档类的成员,CMFCApplication2Set m_MFCApplication2Set
并被声明为 MFC 文档类中的字段。
我尝试过的是使用这个“无类型对象”。该对象似乎有很多数据字段 (m_X),并且只有一种方法显示在 IDE 代码完成中,称为GetRowSetProperties
. 由于发生了任何魔法或注入,这个生成的属性数据库类(它不会明显继承任何东西)在编辑时和编译时对我来说完全是一个谜。
这是我只是试图检查这个东西,看看它是否在它的构造函数运行时初始化了自己:
BOOL CMFCApplication2Doc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE;
TRACE( m_MFCApplication2Set.m_AStringFieldName); // outputs NOISE.
return TRUE; }
在编译时和编辑时,IDE 没有给我任何关于这个“匿名”类所涉及的类型的帮助,该类从无到有继承,但是由于我猜测的那些属性的某种注入,它获得了很多秘密权力。在调试时,我可以看到这个 C++ 类中不仅仅是一堆数据字段,但这仍然不能帮助我知道如何使用它。使用其中一个从数据库中获取记录集的最小代码示例会很棒。
更新:调用OpenDataSource
很有趣,因为它可以编译,但 IDE 认为它不应该是有效的。尽管如此,它运行,并返回 0 作为结果,但这实际上并没有初始化这个CThingyThatVisualStudioGaveYouThatYouDontKnowWhatItIs: