COM组件DLL引出函数的问题-为什么没有引出来?

tomPeakz 2002-05-15 02:03:59
我使用API制作COM组件,编译后发现无法使用regsvr32 xxx.dll进行注册。
说是没有发现引出函数DllRegisterServer,
我使用dumpbin /exports xxx.dll查看,的确看不到引出列表。
而看其它好的DLL,能看到函数列表,可是我这个组件里面使用的引出函数定义是从其它好的里面COPY 过来的啊?
哪里的问题呢?
...全文
65 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomPeakz 2002-05-16
  • 打赏
  • 举报
回复
wuchunzhong的回答是正确的。我的工程里面缺少了DEF文件,真没注意到。

我使用了win32 Dynamic-link library来创建工程。
之所以不使用ATL,是因为我在制作MAPI方面的应用。
害怕不兼容ATL。
给分wuchunzhong 100
wuchunzhong 2002-05-16
  • 打赏
  • 举报
回复
在一个好的ATL的COM模版中的def文件声明为:
EXPORTS
DllCanUnloadNow @1 PRIVATE
DllGetClassObject @2 PRIVATE
DllRegisterServer @3 PRIVATE
DllUnregisterServer @4 PRIVATE
所以应该在def文件中声明!
zhuwenzheng 2002-05-16
  • 打赏
  • 举报
回复
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
_Module.Init(ObjectMap, hInstance, &LIBID_PROPLib);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();

return TRUE; // ok
}

/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE

STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}

/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry

STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
return _Module.RegisterServer(TRUE);
}

/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry

STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}
139129 2002-05-16
  • 打赏
  • 举报
回复
为什么不用ATL?
bluecrest 2002-05-16
  • 打赏
  • 举报
回复
// Used to determine whether the DLL can be unloaded by OLE

STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}

/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry

STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
return _Module.RegisterServer(TRUE);
}

/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry

STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}


fxjtoday 2002-05-15
  • 打赏
  • 举报
回复
原来如此
tomPeakz 2002-05-15
  • 打赏
  • 举报
回复
如下声明
extern "C" HRESULT __stdcall DllCanUnloadNow(void)
extern "C" HRESULT __stdcall DllRegisterServer()
extern "C" HRESULT __stdcall DllRegisterServer()
extern "C" HRESULT __stdcall DllUnregisterServer()
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基类——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基类 2.3.2.1 什么是抽象基类(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基类 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现类厂对象 3.3.2 类厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的类型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元
----------------------------------------------------------- 金蝶K/3 WISE_V14.0.0 Patch说明 -编号:PT095164 ----------------------------------------------------------- (C)金蝶软件(中国)有限公司版权所有,2015年03月16日 补丁编号: PT095164 客户端组件COMRemote.dll,k3bills.dll,K3BillExpImp.dll 中间层组件: WEB组件: 其它组件: 编译环境: WIn2003 VB6.0 SP6.0 补丁性质: 功能改进 所属系统: 供应链整体 适用版本: K/3 WISE_V14.0.0 适用范围: 所有客户 补丁发布说明: 【R20141224-0286】 功能点:仓存管理-生产领料 应用场景:仓存管理-生产领料 症状:新增领料单,录入物料、数量、单价及发料仓库,将光标移至单据头,单价和金额被清零,相应单元格变成灰色不能编辑,删除发料仓库,单价和金额又能重新编。同时,生产领料单新增后,录入了单价和金额。审核退出,再次打开单据一反审核,单价和金额就会被自动清空掉。 【R20150107-0005】 功能点:销售管理-销售订单 应用场景:销售管理-销售订单 症状:销售出库单 根据销售订单下推生成时,如果基础资料有维护销售单价,系统无法优先取销售订单上的单价。 【R20150107-0004】 功能点:销售管理-订单引入 应用场景:销售管理-订单引入 症状:在销售系统录入一张销售订单,然后通过在序时簿上引出EXCEL模板然后在EXCEL中录入内容然后引入到系统中的方式引入一张与手工录入单据客户等内容一致的销售订单。然后在销售出库单上新增选择源单为手工录入以及引入的两张单据同时选择,系统提示【多单选单时,订货机构、购货单位、收货方必须唯一】。如果是在销售订单序时簿同时选择两张单据下推可以成功。 【R20150116-0138】 功能点:仓存管理-虚仓管理 应用场景:仓存管理-虚仓管理 症状:虚仓管理,虚仓入库序时薄过滤,条件选择仓库,F7选择时“提示系统名称和代码已使用”。 【R20150115-0048】 功能点:仓存管理-销售出库 应用场景:仓存管理-销售出库 症状:1、物料进行批次及辅助数量管理,数量精度2位数; 2、录入入库单,批次01,第一次入库基本数量100,换算率为2,辅助数量为50。第二次入库基本数量为120,换算率为3,辅助数量为40,此时库存中基本数量为220,辅助数量为90; 3、销售订单自定义字段辅助单价以及辅助金额,辅助单价为手工录入的单价字段,辅助金额设置公式辅助单价*辅助数量。销售出库单也自定义字段辅助单价以及辅助金额,辅助单价取源单来源销售订单的辅助单价,辅助金额设置公式辅助单价*辅助数量; 4、销售订单录入基本数量300,辅助单价1; 5、销售订单下推销售出库单,然后F12选择库存中的批次01,系统自动携带辅助数量为90,计算辅助金额为90.16,计算不对。 【R20150126-0016】 功能点:销售管理-发票引出 应用场景:销售管理-发票引出 症状:k/3客户端工具包--bos平台--bos数据交换平台:点击‘供应链数据’,新建任务后, 在引出界面选择‘销售发票(普通)’,选择文件类型以及文件路径.步骤2:点击过滤任意一张销售发票,点击执行进行引出.步骤3:新建一空白账套,结束初始化,现将基础资料同步后。然后在将步骤2引出的excel引入到该空白账套中。 【R20150128-0271】 功能点:分销管理-数据传输 应用场景:分销管理-数据传输 症状:分销管理模块打开数据传输和基础设置报错,提示调用分销管理函数出错。 【R20150122-0298】 功能点:供应链整体-单据精度 应用场景:供应链整体-单据精度 症状:外购入库单上新增列1,列2,列1设置数字字段,精度为6位,列2用外购入库单的实收数量*列1,列2精度为6位。如果赋值给列1小数位比较多的话,列2就无法正常算出数值出来,系统默认保留两位,比如,列1输入0.000625,数量为1,此时列2显示为0.00。其他业务单据如销售出库单也有这样的情况出现。 【R20150203-0354】 功能点:存货核算-出库核算 应用场景:存货核算-出库核算 症状:新初始化的账套,物料采用分批认定法(批内加权平均),在录初始数据的时候,录了3个批次的数据,3个批次的价格都不相同,结束初始化之后,做了每个批次的出库单,出库核算的时候,第一个批次取的不是自己批次的批内加权平均价,而是所有批次的加权平均价,但是后面2个批次是正常的。 【R20150109-0061】 功能点:委外管理-委外订单 应用场景:委外管理-委外订单 症状:采购申请下推委外订单,单价都取了第一条分录,全部一样。 【R20150122-0104】 功能点:供应链整体-非核算仓 应用场景:供应链整体-非核算仓 症状:新增的红字销售发票下推生成红字销售出库单后,出库单中的发货仓库按 F7 选择时,无法选择核算仓库,只能选择到非核算仓。 【R20150127-0204】 功能点:供应链整体-单据字定义 应用场景:供应链整体-单据字定义 症状:销售出库单据头增加一个单价字段,设置为必录,然后在系统中录入一张销售出库单,在数据交换平台中导出该单据,在系统中删除该单据,然后进行导入,系统提示【多步操作产生错误。请检查每一步的状态值】。 【R20150202-0271】 功能点:仓存管理-报表查询 应用场景:仓存管理-报表查询 症状:新建用户,授予部分物料的数据权限,登陆K/3后,查询物料收发汇总表(物料收发明细表),勾选参数“显示MTO数量调整单数据”,确定后无法进入报表;如果不勾选参数,或把用户加入管理员组,则可以正常进入报表。 前置补丁: 安装方法:(如有前置补丁,请先依次安装前置补丁) 1.中间层安装补丁; 2.升级帐套; 3.客户端安装补丁。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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