[操作]操作XML的问题
09月 7th, 2008 by admin
Posted in VC/MFC | No Comments »
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetKeystoneCarInfoResponse xmlns="http://www.e6gps.com/">
<GetKeystoneCarInfoResult>
<NewDataSet>
<Table>
<objId>000082</objId>
</Table>
</NewDataSet>
</GetKeystoneCarInfoResult> </GetKeystoneCarInfoResponse> </soap:Body> </soap:Envelope>
这个是XML文件,我想取到000082,怎么取?
因为<这个的问题导致我可能要写些代码来操作
<NewDataSet>
<Table>
<objId>000082</objId>
</Table>
</NewDataSet>
这些内容来取000082,但是这个XML的数据很大,所以会慢
MSXML2::IXMLDOMDocumentPtr pDOMDoc ;
MSXML2::IXMLDOMNodeListPtr pDOMNodeList
MSXML2::IXMLDOMNodePtr pDOMNode
能不能想办法先进行XML字符替换(<换成 <),然后直接解析.
但是我的XML是读在
MSXML2::IXMLDOMDocumentPtr这里的.
先有一个ISoapReaderPtr,然后从ISoapReaderPtr对象里可以取出MSXML2::IXMLDOMDocumentPtr对象,那么我怎么替换?
或者你们会有更好的解决办法,请说下,谢谢了
先把GetKeystoneCarInfoResult的值作为文本读取进来,然后用loadXML方法(用另外的Dom实例)来解析。
[VS2005][操作][Excel]VS2005 如何操作 Excel
09月 4th, 2008 by admin
Posted in VC/MFC | No Comments »
我按照类似VC的步骤,增加一个MFC 的 TypeLib 类
选择了Microsoft Excel…………
然后选择类,有很多个类(我装的是Office 2003)
之后我只选择了Application、WookBooks、Wookbook、Wooksheets、Wooksheet、Range这几个类,其它的都没选
之后在stdafx.h文件的#include <afxdisp.h>下面增加了对上面几个类的引用
但是在编译的时候,出现了N百个错误:
错误 1 error C2371: 'FontPtr' : redefinition; different basic types d:程序设计\c++storage exportdebugexcel.tlh 1219
错误 2 error C2786: 'BOOL (__stdcall *)(HDC,int,int,int,int)' : invalid operand for __uuidof d:程序设计\c++storage exportdebugexcel.tlh 1297
错误 3 error C2923: '_com_IIID' : 'Rectangle' is not a valid template type argument for parameter '_Interface' d:程序设计\c++storage exportdebugexcel.tlh 1297
错误 4 error C3203: '_com_IIID' : unspecialized class template can't be used as a template argument for template parameter '_IIID', expected a real type d:程序设计\c++storage exportdebugexcel.tlh 1297
错误 5 error C2786: 'BOOL (__stdcall *)(HDC,int,int,int,int,int,int,int,int)' : invalid operand for __uuidof d:程序设计\c++storage exportdebugexcel.tlh 1301
错误 6 error C2923: '_com_IIID' : 'Arc' is not a valid template type argument for parameter '_Interface' d:程序设计\c++storage exportdebugexcel.tlh 1301
错误 7 error C3203: '_com_IIID' : unspecialized class template can't be used as a template argument for template parameter '_IIID', expected a real type d:程序设计\c++storage exportdebugexcel.tlh 1301
错误 8 error C2371: 'PicturePtr' : redefinition; different basic types d:程序设计\c++storage exportdebugexcel.tlh 1308
错误 9 error C2504: '_IMsoDispObj' : base class undefined d:程序设计\c++storage exportdebugexcel.tlh 1689
错误 10 error C2504: '_IMsoDispObj' : base class undefined d:程序设计\c++storage exportdebugexcel.tlh 1731
错误 11 error C2504: '_IMsoDispObj' : base class undefined d:程序设计\c++storage exportdebugexcel.tlh 1833
后面的就省略了…………….
参看下面文章:
http://www.joyvc.cn/COM_Component/ComComponentMain00026.html
http://www.joyvc.cn/COM_Component/ComComponentMain00037.html
注意选择合适的import参数,比如
#import "…excel.tlb" rename("Font", "ExcFont")
我暂时的解决办法,是直接把文件先导出*.csv文件……
反正Excel能打开它,不过格式就不能调~~
我在同一台电脑上,用VC6操作,没问题
但是在VS2005上不成功………
VC6在引用Excel后,只有一个*.h文件和一个*.cpp文件,所有类的代码都在里面
但是VS2005很麻烦,每个类规定一个文件,搞得我的工程乱七八糟的
尔后在进行编译的时候,错误不断啊~~~~
直接操作excel代码例子很多,建议楼主先搜索一下,不管是静态还是动态绑定com应该都有,不过这样操作速度往往上不去,如果您的excel表是规格的话,可以使用dao或者ado采用数据库的方式操纵,很简单和access几乎没有什么区别,速度很快
哎,楼上的兄弟,要是能编译通过的话当然好啦!!!
而且网上的代码,清一色都是VC6.0的,我就压根没找到有VS2005的…
要不你们帮我找找看吧,我另+100分!!!
我现在用了以下的方法:
1、首先用VC6创建Excel的几个类(_Application、WookBooks、_Wookbook、Wooksheets、_Wooksheet、Range)
2、把生成的一个Excel.h头文件和一个Excel.cpp代码文件复制到我的VS2005的工程中
3、……………………
居然成功了….
正在研究原因!!!!
此帖再等一个礼拜吧,看有没有高人能帮我搜索到关于VS2005操作Excel的详细资料
包括如何建工程、添加引用,嘿嘿,最好连点哪个按钮都有介绍那就最好了
我自己实在是找不到这些资料,先谢过!!!!
换了你的文件后,错误依然啊………….
而且你这个文件呢,需要先 import 一下 Excel.exe ,编译后这两个文件(*.tlb, *.tlh)才会冒出来的…
用VC6.0的代码实现操作Excel,然后将整个工程转换成2005
呵呵,我开头也是这么想的!
问题是我的工程已经用VS2005完成了,只差操作Excel的部分了
而且我的VC6是英文版的,很多地方都看不懂
再说了,我习惯VS2005了,VS2005的设置我在VC6里找不到…
应该不难吧…上面很多人都给出了方法…属于正解….
mark
全都试过了……….还是报错的!
在这种情况下,楼主你可以把代码上传,说不定只是一个小bug呢,也许是你没注意到。
让大家帮你看看。
哎,这帖拖很久了,该结了!
反正我的问题解决了~~
[操作]位操作
08月 22nd, 2008 by admin
Posted in VC/MFC | No Comments »
大侠们能不能提供些位操作的函数或方法,
比如说提取每个字节的前6个比特,串起来变成新的数据
用stl的Bitset吧 位操作这个比较好
比如说提取每个字节的前6个比特,串起来变成新的数据
( x & 0xFC ) >> 2 就是前6个比特,
要串起来就比较麻烦了,每读取 24 个比特 串一次吧
就和0xfc与运算就行
自己进行位操作吧,
通过移位、拼接获取想要的数据!!!
&0×3f是取低6位,>>2是取高6位。
标准函数库没有“位操作的函数”吧,众口难调啊。自己做一下也不难啊。
函数库的目的就是减少工作量,如果有当然好了
不管有没有,位操作的基本使用方法还是要掌握的
吃饭的工具啊,怎么能不会用
又见一位活跃着的 五星级 用户 冲钻时 多撒点分啊
要串起来好像很麻烦啊,有没有好一点方法,比如是:
00101011 10100111 01110011 10011111
顶 与运算应该不错吧
typedef struct tag_myint
{
int first:6;
int last:26;
}myint;
typedef unit tag_myunit
{
int value;
myint num;
}myunit;
myunit a;
a.value = 1;
int result = a.num.first; /*位域*/
—————————————-
int value = 1;
int result = value & 0×3f;/*位操作*/
—————————————-
以上是两种方法
&0xfc,&0×3f,分别取高低位数据,
[操作][文件]操作ini文件
08月 22nd, 2008 by admin
Posted in VC/MFC | No Comments »
ini文件可以写入没有section的值吗:
例:
key1 = 1
key2= 2
还有,怎样读取ini文件中所有的key值
谢谢
CString str;
GetPrivateProfileString("disabletime", //disabletime 是ini文件中的标题 "Ldisabletime", // Ldisabletime是ini文件中对应标题下的key的名字
LPCTSTR(5000),
str.GetBuffer(MAX_PATH),
MAX_PATH,
".\sleeptime.ini"); //ini文件名
读取依次来就好了,或者加个循环
不知道key的名字,取所有key的名字
每明白LZ想要的是什么
为什么key名不知道?
第一个问题:
当然可以写,INI文件也是文件,而且是文本文件。
第二个问题:
如果知道Key名,像二楼所说一样,使用GetPrivateProfileString函数来取。
如果不知道Key名,那就当成文本文件逐行读出来,用“=”号来分割,自己处理。
不知道能否不用section而直接写key的值,没有这么用过
获得key的名字,恐怕要用CStdioFile一行一行的读ini文件,然后自己分析出来
如果不知道KEY名称的话,就不能用READPROFILEINT什么的了,简单点就直接文件读取啦,每次读一行,以"="作为分隔符.左边是KEY,右边是值.那就OK了.
楼上正解,不知道key名就用读文本文件的方法就可以了!
唉,怎么这么麻烦,
我就是想枚举出key名字,然后取出key值
第一个问题:
可以,以前我写的时候,只要为空就可以
第二个
如果知道Key名,像二楼所说一样,使用GetPrivateProfileString函数来取。
LZ问题是你不知道对应的Key阿,其实读取文本文件的操作也只有几句话而已,弄给循环,再将读出来的你认为需要的字符串分割一下就可以了,试下吧,没做之前千万不要觉得繁琐,那会打消你的积极性的,祝你成功!
[文件][操作]问大家一个文件操作的问题
07月 30th, 2008 by admin
Posted in VC/MFC | No Comments »
文件操作在读取文件时遇到空格就该结束了吧?这个对吗?
如果对,我还想问这时文件中的指针是在空格之后还是在空格之前?
谢谢
判断文件指针是不是EOF,而不是空格,空格也是一个ASCII码
如果用C++的方式来读取文件内容,getline里最后个参数可以设置分隔符
文件操作在读取文件时遇到空格
空格只是文件里数据间隔的一个标识符,不能代表结束,判断文件指针是EOF
指针在空格前或后要看你自己在文件操作时,具体把指针移动到哪
学习
不对,文本文件中可以有空格。文件有专本的结束标志来表示文件是否结束。
空格应该是在读取字符串吧
正解
[VC6.0][操作]VC6.0下的gdi+操作
07月 18th, 2008 by admin
Posted in VC/MFC | No Comments »
看着别人用vc.net下可以new一个pen ,rect,Bitmap….但是我在vc6下久不能用这个 new假如我用
Bitmap *bmp=new Bitmap(1024,768); //出现错误提示:'new' : function does not take 3 parameters
NEW 其它的pen,rect也一样,如果用Bitmap bmp(1024,768)话就可以,不知道怎么回事?
现在我想先new一个Bitmap,再把它当画布,在上面画一些线,作为一个图片保存起来。。然后在点击BUTTON的时候把这个图片在按钮上显示出来~~
问题是现在我连第一步都弄不成了,不知道怎么样才能实现我这个想法,,请各位大侠给点意见。。
VC6 下使用MFC类
CBitmap
CPen
CRect
参考MSDN上的说明
TO xlzxlich
谢谢你辛苦的搜索。。。那些我都看过了。。都是些GDI+的配置,而且我已经测试成功了,,就是在想怎么实现我的想法
TO zgl7903
我是想用GDI+来实现。。。。。
缺少头文件
要使用GDI+,要先初始化GDI环境,有相应的API,并要包含相应的头文件、加入gdiplus.lib
因为DEBUG下重载了new/delete,和GDI+冲突。其实可以避开,用GDI+对象的Clone函数:
Bitmap *bmp = Bitmap(1024,768).Clone();即可。
TO Mackz
谢谢半夜不辞劳累的回帖。。。正在试用中,还请多多指教。
如果我在一个BAR类上画一些图,但是要求它一直显示。就是说不会被其它的窗口,或者对话框擦掉。。
我是用一个按钮的点击事件来实现在BAR类上画图的,如果把画图的语句放在BAR类的onpaint里面的话,要怎么控制它才好呢?
现在我已经转到vc.net下了,,但是有警告,不知道怎么该。。。
请大家看看。。。
MapTree.obj : warning LNK4248: 无法解析 typeref 标记(01000015)(为“_TREEITEM”);映像可能无法运行
1MapBar.obj : warning LNK4248: 无法解析 typeref 标记(01000017)(为“_TREEITEM”);映像可能无法运行
此话怎讲啊?
绘图自然在OnPaint中,其他地方,比如你的按钮消息响应函数中,改变绘图所需的参数然后刷新即可。
后面的警告,在.net的程序中才会出现,建议还是用MFC工程。
哦。。谢谢。。。现在还还是转到.net下了,,有代码提示,,比vc6.0强。。。呵呵
[使用][操作][网页]使用DOM来操作网页自动填写表单其中怎样模拟对一个控件的onclick事件
07月 17th, 2008 by admin
Posted in VC/MFC | No Comments »
我是按照下面的代码做的,但是好像没啥反应,有什么问题?
- C/C++ code
-
VARIANT_BOOL vRect; BSTR eventName = SysAllocString(L"onclick"); hr=pDisp->QueryInterface(IID_IHTMLElement3,(void**)&spElement3); ASSERT(SUCCEEDED(hr)); spElement3->fireEvent(eventName,0,&vRect);
另外,DOM里好像只有IHTMLElement3和IHTMLDocument4能模拟onclick、onchange之类的动作?
下面fireEvent的第二个参数是什么意思,有什么作用?最后的Remarks讲的是什么意思?
IHTMLElement3::fireEvent Method、IHTMLDocument4::fireEvent Method:
HRESULT fireEvent(
BSTR bstrEventName,
VARIANT *pvarEventObject,
VARIANT_BOOL *pfCancelled
);
Parameters
bstrEventName
[in] BSTR that specifies the name of the event to fire.
pvarEventObject
[in] Pointer to a VARIANT that specifies the IHTMLEventObj interface from which the event properties are obtained.
pfCancelled
[out, retval] VARIANT_BOOL that receives one of the following values:
VARIANT_TRUE
Event fired successfully.
VARIANT_FALSE
Event was cancelled.
Return Value
Returns S_OK if successful, or an error value otherwise.
Remarks
If the event being fired cannot be cancelled, IHTMLElement3::fireEvent(IHTMLDocument4::fireEvent) always returns VARIANT_TRUE.
[提供][数据库][操作]MFC提供对数据库操作的类是什么啊
07月 14th, 2008 by admin
Posted in VC/MFC | No Comments »
比如说创建一个类的对象A.
A.函数("SELECT * FROM 表1");
就可以把数据取出放到对象A里面.请问有这样的类吗??
如果你用ODBC的话,用CRecordset,ADO的话,用_RecordsetPtr
参考:
ODBC:
http://www.vckbase.com/document/viewdoc/?id=452
ADO:
http://www.vckbase.com/document/viewdoc/?id=1215
http://www.vckbase.com/document/viewdoc/?id=610
数据库编程开始阶段是有一个台阶要逾越的
先找以些相关的资料看一下把
2楼说的很详细了。
先要看你需要用什么方法连接数据库了,再去找找相关资料吧。
我有好书,要的话联系我
MFC提供的连接数据库的是CDatabase 操作数据库的是CRecordset
[ODBC][ACCESS][操作]MFC ODBC对ACCESS操作问题来个高手帮帮忙
07月 12th, 2008 by admin
Posted in VC/MFC | No Comments »
void CStockADD::OnOK()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CStockSet p;
CString m_sql;
m_sql = "SELECT userName,userSex,IDNO,createCity,totalMoney FROM user";
if (!p.Open(AFX_DB_USE_DEFAULT_TYPE, m_sql))
{
AfxMessageBox("用户表打开失败!");
return;
}
p.AddNew();
p.m_zhanghao = m_zhang;
p.m_man_name = m_name;
p.m_starttime = m_time; //m_starttime 是time 类型,无法写入数据库
p.m_stock_name = m_sname;
p.m_touzi = m_syouzi; //long 类型也不能写入
p.m_shouyi = m_sshouyi; //long 类型也不能写入
p.m_shouyibi = m_sshouyibi;//long 类型也不能写入
p.m_sort = m_spaiming;//long 类型也不能写入
p.Update(); //把新的记录存在数据源里
p.MoveNext(); //指定当前记录为最后一条记录
AfxMessageBox("添加成功!");
OnOK();
// UpdateData(false); //清空已输入内容
}
这个我插入数据的源代码,有问题的地方我都已经注释了
不能向数据库插入,编译有错,估计是time 和long 类型不能插入
如果没有什么严格的要求,你建表的时候都选文本类型吧.time,long等类型通过CString Format一下
p.AddNew();
p.m_zhanghao = m_zhang;
p.m_man_name = m_name;
p.m_starttime = m_time; //m_starttime 是time 类型,无法写入数据库
p.m_stock_name = m_sname;
p.m_touzi = m_syouzi; //long 类型也不能写入
p.m_shouyi = m_sshouyi; //long 类型也不能写入
p.m_shouyibi = m_sshouyibi;//long 类型也不能写入
p.m_sort = m_spaiming;//long 类型也不能写入
p.Update(); //把新的记录存在数据源里
p.MoveNext(); //指定当前记录为最后一条记录
===================================================
换成下面这样试试
p.AddNew();
p.SetFieldValue("字段名",m_zhang);
p.SetFieldValue("字段名",m_name);
p.SetFieldValue("字段名",m_time);
p.SetFieldValue("字段名",m_syouzi);
…
p.Update;
p.MoveNext;
通过SetFieldValue来设置字段值,具体参数怎么设置,你自己查一查的。
m_shouyi 是什么类型?m_starttime 是什么类型?
不要直接赋值,转换成Variant类型后再赋值。
注释这条语句p.MoveNext();
看看
1:确定你的m_time的类型,他要么是时间类型,要么是符合时间类型规范的字符串,否则无法插入到数据库。
2:p.m_touzi = m_syouzi; //long 类型也不能写入
确定一下你的p.m_touzi的类型和m_syouzi的类型。类型都不匹配,你怎么可能操作成功?
[数据库][操作]请教个对数据库操作的问题。。。
07月 11th, 2008 by admin
Posted in VC/MFC | No Comments »
数据库中如何比较2列值唯一对应?
例如:
A列 B列
001 衣服MM
002 衣服GG
我想比较这2列值互为一一对应,即001只能对应 衣服MM,衣服也只能对应001。请问大虾们怎么实现呢?
sql语句
1.查询时A列用distinct限定,保证结果集中A列无重复
2.判断找到的结果集中,B列的元素有无重复
3.若无重复则一一对应