5071|3

91

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

导出DLL整个类和单独导出类函数有何区别? [复制链接]

我要用到一个开源包(GeoPad),开发环境为EVC+PPC2003模拟器,所给开发包SDK中包括了3个DLL(GeoPAD.DLL,GeoPADVB.NET.DLL,和GeoPADVC.NET.DLL)和一个.h文件(定义了一个类GeoPADCtrl),还分别给了C#和c++版的2个例程。
C#版的例程将GeoPADVB.NET.DLL加入引用,并将3个DLL都放至EXE目录下,语句 GeoPADVB.NET.GeoPADCtrl geo = new GeoPADVB.NET.GeoPADCtrl()得到一个封装在DLL中类GeoPADCtrl的实例,通过操作该实例能实现所需功能。我用DLL查看工具查看——GeoPAD.DLL和GeoPADVC.NET.DLL中都一系列函数,而GeoPADVB.NET.DLL中没有函数,不明白这三个DLL是如何将类GeoPADCtrl封装起来的(必须3个DLL一起使用才能实现功能) 。

现在问题来了,我要用C++实现,SDK中指明C++实现只需用到GeoPAD.DLL和定义了GeoPADCtrl类的.h文件,所给的C++版例程中是将该.h头文件加入到工程中,GeoPADCtrl类构造函数中初始化成员变量HINSTANCE hInstasnce = LoadLibrary(TEXT("\\windows\\GeoPAD.dll"))
而其成员函数形式为:
        bool DoSome(char *Parameter)
{
bool (PASCAL *funDoSome)(char *Parameter);
(FARPROC&)funDoSome= GetProcAddress(hInstasnce,_T("funNameInDll"));
if(funDoSome)
return funDoSome(Parameter);
return false;
}
现在生成类GeoPADCtrl对象时 hInstasnce = LoadLibrary(TEXT("\\windows\\GeoPAD.dll"))这句总返回为NULL,路径保证正确。
而改为hInstasnce = LoadLibrary(TEXT("\\windows\\GeoPADVB.NET.dll"))则抛出First-chance exception in XXX.exe: 0xC0000005异常,C++实现只需要导入DLL中的函数而不是整个类,我认为导入GeoPAD.dll就可以了。主要是不明白这3个DLL是如何将GeoPADCtrl类封装起来的,而单独导出类中的函数是不是有什么地址偏移什么的?我是猜测的,望大家指导下。
用depends.exe查看GeoPADVB.NET.DLL无错误提示,在CPU类型栏显示为X86
而用depends.exe查看GeoPAD.DLL则提示:
Error: At least one required implicit or forwarded dependency was not found.
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found
CPU类型栏显示为ARM
想请教下大家:
1:C#版代码能实现功能而C++版LoadLibrary失败可能是由于什么原因造成?A:因为DLL的CPU类型不同 B:因为导出整个DLL封装类和单独导出类函数的差异
2:如果C++实现我也想将整个类导出来该如何实现?用Lib+.h的方式?

最新回复

接分  详情 回复 发表于 2008-9-19 18:13
点赞 关注

回复
举报

55

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
UP
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
结贴了,来人接分啊
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

4
 
接分
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表