[操作]操作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>
&lt;NewDataSet&gt;
  &lt;Table&gt;
    &lt;objId&gt;000082&lt;/objId&gt;
  &lt;/Table&gt;
&lt;/NewDataSet&gt;
</GetKeystoneCarInfoResult> </GetKeystoneCarInfoResponse> </soap:Body> </soap:Envelope>

这个是XML文件,我想取到000082,怎么取?
因为&lt;这个的问题导致我可能要写些代码来操作
&lt;NewDataSet&gt;
  &lt;Table&gt;
    &lt;objId&gt;000082&lt;/objId&gt;
  &lt;/Table&gt;
&lt;/NewDataSet&gt;
这些内容来取000082,但是这个XML的数据很大,所以会慢

MSXML2::IXMLDOMDocumentPtr pDOMDoc ;
MSXML2::IXMLDOMNodeListPtr pDOMNodeList
MSXML2::IXMLDOMNodePtr pDOMNode

能不能想办法先进行XML字符替换(&lt;换成 <),然后直接解析.
但是我的XML是读在
MSXML2::IXMLDOMDocumentPtr这里的.
先有一个ISoapReaderPtr,然后从ISoapReaderPtr对象里可以取出MSXML2::IXMLDOMDocumentPtr对象,那么我怎么替换?

或者你们会有更好的解决办法,请说下,谢谢了

先把GetKeystoneCarInfoResult的值作为文本读取进来,然后用loadXML方法(用另外的Dom实例)来解析。

Tags: ,

[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能打开它,不过格式就不能调~~

引用 2 楼 scq2099yt 的回复:
参看下面文章:
http://www.joyvc.cn/COM_Component/ComComponentMain00026.html
http://www.joyvc.cn/COM_Component/ComComponentMain00037.html

我在同一台电脑上,用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的详细资料
包括如何建工程、添加引用,嘿嘿,最好连点哪个按钮都有介绍那就最好了
我自己实在是找不到这些资料,先谢过!!!!

引用 3 楼 jameshooo 的回复:
注意选择合适的import参数,比如
#import "…excel.tlb" rename("Font", "ExcFont")

换了你的文件后,错误依然啊………….
而且你这个文件呢,需要先 import 一下 Excel.exe ,编译后这两个文件(*.tlb, *.tlh)才会冒出来的…

用VC6.0的代码实现操作Excel,然后将整个工程转换成2005

引用 9 楼 scq2099yt 的回复:
用VC6.0的代码实现操作Excel,然后将整个工程转换成2005

呵呵,我开头也是这么想的!
问题是我的工程已经用VS2005完成了,只差操作Excel的部分了
而且我的VC6是英文版的,很多地方都看不懂
再说了,我习惯VS2005了,VS2005的设置我在VC6里找不到…

应该不难吧…上面很多人都给出了方法…属于正解….

mark

引用 11 楼 wgm001 的回复:
应该不难吧…上面很多人都给出了方法…属于正解….

全都试过了……….还是报错的!

在这种情况下,楼主你可以把代码上传,说不定只是一个小bug呢,也许是你没注意到。
让大家帮你看看。

哎,这帖拖很久了,该结了!
反正我的问题解决了~~

Tags: , , ,

[操作]位操作

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位。

标准函数库没有“位操作的函数”吧,众口难调啊。自己做一下也不难啊。

引用 7 楼 Mackz 的回复:
标准函数库没有“位操作的函数”吧,众口难调啊。自己做一下也不难啊。

函数库的目的就是减少工作量,如果有当然好了

不管有没有,位操作的基本使用方法还是要掌握的

  吃饭的工具啊,怎么能不会用

又见一位活跃着的 五星级 用户 冲钻时 多撒点分啊

要串起来好像很麻烦啊,有没有好一点方法,比如是:
00101011 10100111 01110011 10011111

引用 4 楼 greatws 的回复:
就和0xfc与运算就行

顶 与运算应该不错吧

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,分别取高低位数据,

Tags: ,

[操作][文件]操作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了.

引用 5 楼 wangpanli 的回复:
第一个问题:
  当然可以写,INI文件也是文件,而且是文本文件。

第二个问题:
  如果知道Key名,像二楼所说一样,使用GetPrivateProfileString函数来取。
  如果不知道Key名,那就当成文本文件逐行读出来,用“=”号来分割,自己处理。

楼上正解,不知道key名就用读文本文件的方法就可以了!

唉,怎么这么麻烦,
我就是想枚举出key名字,然后取出key值

引用 5 楼 wangpanli 的回复:
第一个问题:
  当然可以写,INI文件也是文件,而且是文本文件。

第二个问题:
  如果知道Key名,像二楼所说一样,使用GetPrivateProfileString函数来取。
  如果不知道Key名,那就当成文本文件逐行读出来,用“=”号来分割,自己处理。

第一个问题:
  可以,以前我写的时候,只要为空就可以
第二个
如果知道Key名,像二楼所说一样,使用GetPrivateProfileString函数来取。

引用 9 楼 chinapeter2008 的回复:
唉,怎么这么麻烦,
我就是想枚举出key名字,然后取出key值

LZ问题是你不知道对应的Key阿,其实读取文本文件的操作也只有几句话而已,弄给循环,再将读出来的你认为需要的字符串分割一下就可以了,试下吧,没做之前千万不要觉得繁琐,那会打消你的积极性的,祝你成功!

Tags: , ,

[文件][操作]问大家一个文件操作的问题

07月 30th, 2008 by admin
Posted in VC/MFC | No Comments »

文件操作在读取文件时遇到空格就该结束了吧?这个对吗?
如果对,我还想问这时文件中的指针是在空格之后还是在空格之前?
谢谢

判断文件指针是不是EOF,而不是空格,空格也是一个ASCII码

引用 2 楼 tracing 的回复:
判断文件指针是不是EOF,而不是空格,空格也是一个ASCII码

如果用C++的方式来读取文件内容,getline里最后个参数可以设置分隔符

文件操作在读取文件时遇到空格
空格只是文件里数据间隔的一个标识符,不能代表结束,判断文件指针是EOF

指针在空格前或后要看你自己在文件操作时,具体把指针移动到哪

学习

不对,文本文件中可以有空格。文件有专本的结束标志来表示文件是否结束。

空格应该是在读取字符串吧

引用 2 楼 tracing 的回复:
判断文件指针是不是EOF,而不是空格,空格也是一个ASCII码

正解

Tags: , ,

[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强。。。呵呵

Tags: , ,

[使用][操作][网页]使用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.

Tags: , , ,

[提供][数据库][操作]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

Tags: , , ,

[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 是什么类型?

引用 4 楼 happyparrot 的回复:
m_shouyi 是什么类型?m_starttime 是什么类型?

不要直接赋值,转换成Variant类型后再赋值。
注释这条语句p.MoveNext();

看看

引用 3 楼 my_girlf 的回复:
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…

1:确定你的m_time的类型,他要么是时间类型,要么是符合时间类型规范的字符串,否则无法插入到数据库。
2:p.m_touzi = m_syouzi;    //long 类型也不能写入
确定一下你的p.m_touzi的类型和m_syouzi的类型。类型都不匹配,你怎么可能操作成功?

Tags: , , ,

[数据库][操作]请教个对数据库操作的问题。。。

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.若无重复则一一对应

Tags: , ,