关于如何用vc对话框程序调用组件的问题!!!!!!!!!!!(虚心请教)

mufengqing 2004-04-18 02:29:11
//我的com组件TaskParser.idl的代码如下
import "oaidl.idl";
import "ocidl.idl";

[
object,
uuid(6C0F28F0-051A-4C2E-BCC9-A1DE7B8125CD),
dual,
nonextensible,
helpstring("IXmlParser Interface"),
pointer_default(unique)
]
interface IXmlParser : IDispatch{
[id(1), helpstring("method GetXml")] HRESULT GetXml(BSTR xmlpath);
};
[
uuid(BA3D46CE-CAA4-4994-87F4-66CAFBDB65FB),
version(1.0),
helpstring("TaskParser 1.0 Type Library")
]
library TaskParserLib
{
importlib("stdole2.tlb");
[
uuid(9B30CCD3-E14F-41AE-8122-CC8B54D4A099),
helpstring("XmlParser Class")
]
coclass XmlParser
{
[default] interface IXmlParser;
};
};
//接口XmlParser的代码如下
HKCR
{
TaskParser.XmlParser.1 = s 'XmlParser Class'
{
CLSID = s '{9B30CCD3-E14F-41AE-8122-CC8B54D4A099}'
}
TaskParser.XmlParser = s 'XmlParser Class'
{
CLSID = s '{9B30CCD3-E14F-41AE-8122-CC8B54D4A099}'
CurVer = s 'TaskParser.XmlParser.1'
}
NoRemove CLSID
{
ForceRemove {9B30CCD3-E14F-41AE-8122-CC8B54D4A099} = s 'XmlParser Class'
{
ProgID = s 'TaskParser.XmlParser.1'
VersionIndependentProgID = s 'TaskParser.XmlParser'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
val AppID = s '%APPID%'
'TypeLib' = s '{BA3D46CE-CAA4-4994-87F4-66CAFBDB65FB}'
}
}
}
我添加的接口函数为GetXml(BSTR xmlpath)
我怎么在vc的程序里单击按钮时调用这个组件??
...全文
63 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
PureCoder 2004-05-02
  • 打赏
  • 举报
回复
我也做了个例子,出现的错误也是:
*提示的错误是comip.h的东西,如下*/

Interface* operator->() const
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
}

return m_pInterface;
}
有高手讲讲道理吗?
tshyson 2004-04-30
  • 打赏
  • 举报
回复
mfc的程序嗎,呵呵呵,有好多種調用方法,簡單的#import “路徑/dll文件名稱“
//声明接口对象

public:

IXmlParserPtr pXmlParser;//*********************聲明成爲智能指针

HRESULT hresult;

CoInitialize(NULL);

hresult=pXmlParser.CreateInstance (__uuidof(XmlParser));

if(FAILED(hresult))

{

AfxMessageBox("初始化服务组件失败");

return;

}
//接下来就是调用了,指针一样的用就行乐
jink 2004-04-30
  • 打赏
  • 举报
回复
不要pXmlParser->Release()两遍,删掉一个
wangweixing2000 2004-04-30
  • 打赏
  • 举报
回复
上面都写了,如果想要个完整的你留个email(今天4点前,明天回家了),我给你现做一个
#import "路径+your.dll"//或者#import "路径+your.tlb"

mufengqing 2004-04-29
  • 打赏
  • 举报
回复
帮忙写一个吧!!!!!!!!!!!!
mufengqing 2004-04-29
  • 打赏
  • 举报
回复
//声明接口对象

public:

IXmlParser *pXmlParser;
//GUID的值
extern "C" const GUID CLSID_XmlParser =
{ 0x9B30CCD3,0xE14F,0x41AE,
{0x81,0x22,0xCC,0x8B,0x54,0xD4,0xA0,0x99} } ;

extern "C" const GUID IID_IXmlParser =
{ 0x6C0F28F0,0x051A,0x4C2E,
{0xBC,0xC9,0xA1,0xDE,0x7B,0x81,0x25,0xCD} } ;

extern "C" const GUID LIBID_TaskParserLib =
{ 0xBA3D46CE,0xCAA4,0x4994,
{0x87,0xF4,0x66,0xCA,0xFB,0xDB,0x65,0xFB} } ;

//调用组件的函数

void CcomuseDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here


HRESULT hresult;

CoInitialize(NULL);

hresult=CoCreateInstance(CLSID_XmlParser,NULL,CLSCTX_INPROC_SERVER,IID_IXmlParser,(void**)&pXmlParser);

if(FAILED(hresult))

{

AfxMessageBox("初始化服务组件失败");

return;

}

pXmlParser->GetXml();

pXmlParser->Release();

if(pXmlParser->Release()==0)
{
printf("the reference count of taskparser object is zero");

CoUninitialize();
}

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*提示的错误是comip.h的东西,如下*/

Interface* operator->() const
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
}

return m_pInterface;
}

//紧急求救,就要交作业啦!!哪个哥哥能帮帮忙呀!!!!!!
_foo 2004-04-18
  • 打赏
  • 举报
回复
在你的对话框工程里用#import 引入你写的组件dll。
然后用IXmlParserPtr来访问

具体看http://expert.csdn.net/Expert/TopicView1.asp?id=2977524
itmaster 2004-04-18
  • 打赏
  • 举报
回复
参考下:
http://www.zdnet.com.cn/common/printfriendly/printfriendly.htm?AT=39065245-2000081534t-20000560c

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧