• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何调用ATLCOM工程生成的DLL中的方法?谢谢任何形式的帮助!

如何调用ATLCOM工程生成的DLL中的方法?谢谢任何形式的帮助!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atlcom.h,c#调用dll,c#调用c dll,java调用dll,易语言调用dll等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何调用ATL COM工程生成的DLL中的方法?谢谢任何形式的帮助!
描述:

有这个接口提供了三个方法:
/******** PayTxn.idl ************/
    interface IPositivePTxn : IDispatch
    {
        [id(1), helpstring("method PPAutoValidation")] HRESULT PPAutoValidation(BSTR pFullPathName);
        [id(2), helpstring("method PPManualValidation")] HRESULT PPManualValidation(BSTR pMicrNo,BSTR pChequeNO,BSTR fltAmount,BSTR pClrBranch,BSTR dtClrdate,BSTR pDebitBr,BSTR pICSRefNumber);
        [id(3), helpstring("method PPCreateReport")] HRESULT PPCreateReport(BSTR dtClrDate,BSTR clrAccount,BSTR pReportType1,BSTR pReportType2);
    };
/********** PayTxn.h ******************/
class ATL_NO_VTABLE CPositivePTxn : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CPositivePTxn, &CLSID_PositivePTxn>,
    public ISupportErrorInfo,
    public IDispatchImpl<IPositivePTxn, &IID_IPositivePTxn, &LIBID_POSITIVEPAYTXNLib>
{
public:
    CPositivePTxn()
    {
    }
    
    ~CPositivePTxn();
    
DECLARE_REGISTRY_RESOURCEID(IDR_POSITIVEPTXN)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CPositivePTxn)
    COM_INTERFACE_ENTRY(IPositivePTxn)
    COM_INTERFACE_ENTRY(ISupportErrorInfo)
    COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
.
.
.
    STDMETHOD(PPCreateReport)(BSTR dtClrDate,BSTR clrAccount,BSTR pReportType1,BSTR pReportType2);
    STDMETHOD(PPManualValidation)(BSTR pMicrNo,BSTR pChequeNO,BSTR fltAmount,BSTR pClrBranch,BSTR dtClrdate,BSTR pDebitBr,BSTR pICSRefNumber);
    STDMETHOD(PPAutoValidation)(BSTR pFullPathName);
};
然后客户端程序如何调用这几个接口方法?
我打算这么调,可是这些接口好象没有REFIID?
 
if ((hr = ::CLSIDFromProgID(L"PayTxn.PositivePTxn.1", &clsid)) != NOERROR) {
        TRACE("unable to find Program ID -- error = %x\n", hr);
        return;
    }
    if ((hr = ::CoGetClassObject(clsid, CLSCTX_INPROC_SERVER,
        NULL, IID_IClassFactory, (void **) &pClf)) != NOERROR) {;
    TRACE("unable to find CLSID -- error = %x\n", hr);
    return;
    }
    pClf->CreateInstance(NULL, IID_IUnknown, (void**) &pUnk);
    pUnk->QueryInterface(IID_IPTXN,(void**) &pPtxn);//接口声明也不知道该怎么写
IDL文件是这样的,不明白呀:
import "oaidl.idl";
import "ocidl.idl";
    [
        object,
        uuid(BE225665-CEAD-11D6-8760-00096B40CB3E),
        dual,
        helpstring("IPositivePTxn Interface"),
        pointer_default(unique)
    ]
    interface IPositivePTxn : IDispatch
    {
        [id(1), helpstring("method PPAutoValidation")] HRESULT PPAutoValidation(BSTR pFullPathName);
        [id(2), helpstring("method PPManualValidation")] HRESULT PPManualValidation(BSTR pMicrNo,BSTR pChequeNO,BSTR fltAmount,BSTR pClrBranch,BSTR dtClrdate,BSTR pDebitBr,BSTR pICSRefNumber);
        [id(3), helpstring("method PPCreateReport")] HRESULT PPCreateReport(BSTR dtClrDate,BSTR clrAccount,BSTR pReportType1,BSTR pReportType2);
    };
[
    uuid(BE225657-CEAD-11D6-8760-00096B40CB3E),
    version(1.0),
    helpstring("PositivePayTxn 1.0 Type Library")
]
library POSITIVEPAYTXNLib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");
    [
        uuid(BE225666-CEAD-11D6-8760-00096B40CB3E),
        helpstring("PositivePTxn Class")
    ]
    coclass PositivePTxn
    {
        [default] interface IPositivePTxn;
    };
};


解决方案1:

.idl文件中有两部分,
其中的odl(就是library block)是程成tlb的,idl(除了library block的其它block)是生成proxy stub的

解决方案2:

library POSITIVEPAYTXNLib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");
    [
        uuid(BE225666-CEAD-11D6-8760-00096B40CB3E),
        helpstring("PositivePTxn Class")
    ]
    coclass PositivePTxn
    {
        [default] interface IPositivePTxn;
    };
};
library内部的是odl
The MIDL compiler generates a type library when it sees a library statement. The statements found in the library block follow essentially the same syntax as earlier versions of ODL.
ODL attributes can be applied to an element both inside and outside of the library block. Outside the block, they typically do nothing, unless the element is referenced from within the block by using it as a base type, inheriting from it, or referencing it on a line such as this:
library a
{
   interface [xyz]];
   struct bar;
   ...
};
If&

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 为什么用向导生成的ATLCOM工程(dll)没有dlldatac文件
  • ATLCOM中能够用继承自CWnd的MFC类吗
  • ATLCOM事件,如何实现多个连接点的问题?
  • 如何在MFC程序中实现ATLCOM接口,并支持事件?
  • ATLCOM另我郁闷
  • 为什么我的ATLCOM控件中的输入框不能响应回车键?盼解答
  • 为什么我的ATLCOM控件中的输入框不能响应回车键?盼解答
  • 怎么样得到ATLCOM的DLL的路径????
  • 大家来说说ATLCOM、ActiveX、DLL三者有什么区别和联系?
  • ATLcom初学者求教关于VC编译错误

相关文章

  • 2017-06-04 如何获得手写板的签名??百思不得其解,期待高人指点迷津!谢谢
  • 2017-06-05 COM的运用写创建
  • 2017-06-04 如何用MFC把ActiveX的属性值可以保存?
  • 2017-06-04 跪求COM+电子书!!!!!
  • 2017-06-05 关于子类化Windows树控件(CTreeCtrl)后,滚动条和图表透明背景色问题
  • 2017-06-05 求一个多进程间产生死锁的例子,给出源代码的50分!!
  • 2017-06-04 用dll的COM除了cocreateinstance能不能就当普通DLL用loadlibrary调用。
  • 2017-06-04 把ping的功能嵌入到ie中间,是否要用到ie编程
  • 2017-06-04 vc++在win7系统上连接不上oracle数据库
  • 2017-06-04 嵌在网页中的OCX怎么获得IE的“刷新”和“回车”的消息

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • dll里调用DLL可不可以
    • 一个超级简单的问题,up有分
    • 再问:现在市面上那本书讲COM比较好的
    • COM究竟是什么
    • ATL中可以调用无模式对话框吗?
    • 如何得到宿主进程的窗口句柄?
    • VC和AUTOCAD的二次开发怎么联接???????????????
    • VC下IE控件的开发
    • 求救VB使用webbrowser浏览网页显示0x00000000x0000000该内存不能为"read"
    • 看见lib中的一个函数就在哪儿,调用的时候却出现LNK2001错误!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有