我想在com控件中做一个接口,用于返回一个xml的文档对象,
但是在IDL文件中变量IXMLDOMDocument通不过,
所以我想把xml文档转化为BSTR型去返回,
但是不知道BSTR类型到底能返回多长的一个字符串?
如果我的xml文件很大怎么办?
但是在IDL文件中变量IXMLDOMDocument通不过,
所以我想把xml文档转化为BSTR型去返回,
但是不知道BSTR类型到底能返回多长的一个字符串?
如果我的xml文件很大怎么办?
解决方案 »
- bmp位图缩放的问题
- 急..如何改变工具条按钮大小
- ttf-Fill
- 如何在VC中的一个主窗体中的一个按键启动另一个窗体
- 求深入浅出MFC 光盘上的源码
- 请教:我把以前在98下编译的程序拿到xp下编译出现如下问题.请问怎么解决.
- 请高手帮忙:现已有一个基本的绘图程序,想加入一个逻辑坐标系以实现绕原点旋转,为什么就运行不正常了
- 我想调用线程时传递一个窗口对象怎么操作????
- 不同的传输形式,如数据流,文件,bitmap,jpec 用vc实现数据源码 的改动是不是很大,有什么不同?
- 跪求...在线等...将C++代码转换成C#代码
- XMLHTTPRequest如何实现VC异步调用?
- 怎样实现用Browse for Folder遍历目录查找指定文件?????
我上次就是因为用了这个类型出错的”胡扯!BSTR可以传递非常大的2进制数据,当然也包括字符串,前提是你正确理解并操作BSTR的话。至于到底有多大,俺没有确认过,但俺认为是4个字节所能表示的最大数
当然,实际使用中肯定要受到系统资源的限制
IDL文件里也能用namespace?开玩笑吧?你应该先导入MSXML的idl文件。
是不是包含了它就可以把返回参数设为:[out,retval]IXMLDOMDocumentPtr pDoc?BSTR是可以保存4个字节的最大数,但是XML到BSTR,调用的时候又要BSTR到XML,比较麻烦,最好是COM能直接返回一个xml文件。jiangsheng(蒋晟.Net):“用IStream传内存句柄就可以了,参数类型可以用IUnknown。”
具体该怎么做呢?能否详细点?谢谢。
我是通过
IXMLHTTPRequestPtr pIXMLHTTPRequest;
pIXMLHTTPRequest->responseXML;
得到一个xml文件的。
or
#import "msxml2.idl"
当定义[out,retval]IXMLDOMDocument *pDoc,或IXMLDOMDocumentPtr pDoc,时,
还是出错:
error MIDL2025 : syntax error : expecting a type specification near "IXMLDOMDocument"请问有没有好的方法?谢谢了。
我曾经尝试过10M的
但是我希望最好还是直接通过pIXMLHTTPRequest->responseXML的返回值去传递,
省了来回转化,不知道有没有人做过类似的工作?
返回对象应该定义成 [out,retval]IXMLDOMDocument** ppDoc
或者最苯的定义成 [out,retval]IUnknown** ppDoc
得到xml对象后再QueryInterface
import "msxml.idl";
interface IXMLDOMDocument;
接口定义为:
[id(1), helpstring("method Test")] HRESULT Test([out,retval]IXMLDOMDocument** ppDoc);
但是还是出错:
unresolved type declaration : IXMLDOMDocument [ Parameter 'ppDoc' of Procedure 'Test' ( Interface 'INappAddress' ) ]
请问这是为什么?谢谢
下的msxml.idl文件中根本没有IXMLDOMDocument的定义,
不知道谁有这个idl文件,给我传一个,谢谢!
参见:
MSDN 之 Microsoft XML 3.0 - XML Reference:
---------------------------
◎ Example
The following C/C++ example creates DOMDocument and queries for the other interfaces.HRESULT hr;
IXMLDOMDocument * pXMLDoc;
IXMLDOMNode * pXDN;
//...
hr = CoInitialize(NULL);
// Check the return value, hr...
hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument, (void**)&pXMLDoc);
// Check the return value, hr...
hr = pXMLDoc->QueryInterface(IID_IXMLDOMNode, (void **)&pXDN);
// Check the return value.◎ Requirements
Implementation: msxml3.dll, msxml2.lib[C/C++]
Header and IDL files: msxml2.h, msxml2.idl
--------------------------------------
也就是说你要升级到3.0版才会有!按照楼主的想法,只要使用COM里面的包容模型,用自己的COM对象对MSXML 3.0 里面的DOMDocument 对象简单的封装一下就可以了。不知道我说得对不对?
IXMLDocument是通不过的,
我是在com中已经得到了一个xml文档,希望直接把这个文档对象传递出去,
在客户端直接调用接口得到一个IXMLDOMDocument的对象。十分急,不管我怎么在idl文件中加头文件,就是不让定义IXMLDOMDocument** ppDoc
“实在不行定义成[out,retval]IUnknown** ppDoc 总应该可以了,得到对象后再QueryInterface”请问是怎么用IUnknown** ppDoc 接收XMLDOMDocument的值?
“实在不行定义成[out,retval]IUnknown** ppDoc 总应该可以了,得到对象后再QueryInterface”服务器端:
把你的 IXMLDOMDocument 指针,调用QueryInterface得到IUnknown传递出去
客户端:
得到IUnknown,调用QueryInterface或类型的方法,得到IXMLDOMDocument 也可以用IDispatch类型传递
“服务器端:
把你的 IXMLDOMDocument 指针,调用QueryInterface得到IUnknown传递出去
客户端:
得到IUnknown,调用QueryInterface或类型的方法,得到IXMLDOMDocument ”真不好意思,不太会用这几个函数哦....能不能给个例子?谢谢了
然后:
CComPtr<IUnknown> pObj;
CComQIPtr<IXMLDOMDocument> pDoc;
Test(&pObj);
pDoc = pObj;虽然多了一次QueryInterface,但总算是解决了问题。
我检查了下msxml.idl,发现确实没有IXMLDOMDocument的定义,
于是我下载了xmlsdk3.0,然后按照你说的,改为了:"msxml2.idl"
但是却出现13个错误:
msxml2.idl
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(49) : error MIDL2003 : redefinition : _xml_error
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(49) : error MIDL2003 : redefinition : XML_ERROR
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(151) : error MIDL2003 : redefinition : XMLELEMTYPE_ELEMENT
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(152) : error MIDL2003 : redefinition : XMLELEMTYPE_TEXT
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(153) : error MIDL2003 : redefinition : XMLELEMTYPE_COMMENT
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(154) : error MIDL2003 : redefinition : XMLELEMTYPE_DOCUMENT
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(155) : error MIDL2003 : redefinition : XMLELEMTYPE_DTD
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(156) : error MIDL2003 : redefinition : XMLELEMTYPE_PI
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(158) : error MIDL2003 : redefinition : XMLELEMTYPE_OTHER
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(2680) : error MIDL2003 : redefinition : IXMLDocument
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(2734) : error MIDL2003 : redefinition : IXMLElement
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(2800) : error MIDL2003 : redefinition : IXMLError
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\msxml2.idl(3133) : error MIDL2003 : redefinition : XMLDocument这是怎么回事呀?我在vb里包含msxml3.0是可以通过的。