从DLL导入的类如何使用
我从一个DLL文件导入了两个类,一个没有什么方法,另一个有很多方法,用带很多方法的类创建,但是创建的时候指针始终是空例如两个类C_CLASSDLL只有几个基本方法CCLA...
我从一个DLL文件导入了两个类,一个没有什么方法,另一个有很多方法,用带很多方法的类创建,但是创建的时候指针始终是空
例如两个类
C_CLASSDLL 只有几个基本方法
CCLASSDLL 具有很多方法
使用的时候
CCLASSDLL cd;
cd.DoSomeThing()
总是返回空
感谢
可能是我描述的不够准确,但后来解决了,方法描述如下
DLL是别的公司做好的,用它来控制硬件。但该公司没有提供demo,没有提供 .h 和 .lib,因此才会如此麻烦
如果该DLL使用显示链接进行编译,也好办,动态加载DLL,用工具查看其函数然后GetProcAddress可以使用了
但如果该DLL使用隐式链接进行编译,即使知道函数名也无法用GetProcAddress返回地址
将该DLL添加到 工程后,生成两个类,如前描述
只有几个 基本方法的类 到底可以干什么,我没时间弄懂了,以后再说吧
具有很多方法的类 显然是要使用的类 因为控制硬件的方法(函数)都在这个类里面
由于使用自动化技术(ATL or COM)因此 语句
CCLASSDLL cd; 创建对象后 还要调用CreateDispatch() 真正的实例化 但这个函数需要一个CLSID
这个CLSID就是使用 regsvr32 "...\...\xxx.DLL"命令向系统注册的时候产生的一个128位的数值,而且该数值是动态生成的,不同时间不同机器注册DLL时该数值均不同
因此需要另外一种方法获取这个CLSID也就是 CLSIDFromProgID()函数了
这个函数使用DLL的类型名(不知“类型名”这个叫法是否准确)作为参数,向系统注册表查询该CLSID,而DLL的类型名必定是不变的 展开
例如两个类
C_CLASSDLL 只有几个基本方法
CCLASSDLL 具有很多方法
使用的时候
CCLASSDLL cd;
cd.DoSomeThing()
总是返回空
感谢
可能是我描述的不够准确,但后来解决了,方法描述如下
DLL是别的公司做好的,用它来控制硬件。但该公司没有提供demo,没有提供 .h 和 .lib,因此才会如此麻烦
如果该DLL使用显示链接进行编译,也好办,动态加载DLL,用工具查看其函数然后GetProcAddress可以使用了
但如果该DLL使用隐式链接进行编译,即使知道函数名也无法用GetProcAddress返回地址
将该DLL添加到 工程后,生成两个类,如前描述
只有几个 基本方法的类 到底可以干什么,我没时间弄懂了,以后再说吧
具有很多方法的类 显然是要使用的类 因为控制硬件的方法(函数)都在这个类里面
由于使用自动化技术(ATL or COM)因此 语句
CCLASSDLL cd; 创建对象后 还要调用CreateDispatch() 真正的实例化 但这个函数需要一个CLSID
这个CLSID就是使用 regsvr32 "...\...\xxx.DLL"命令向系统注册的时候产生的一个128位的数值,而且该数值是动态生成的,不同时间不同机器注册DLL时该数值均不同
因此需要另外一种方法获取这个CLSID也就是 CLSIDFromProgID()函数了
这个函数使用DLL的类型名(不知“类型名”这个叫法是否准确)作为参数,向系统注册表查询该CLSID,而DLL的类型名必定是不变的 展开
2个回答
展开全部
有点看不懂楼主的描述,“用带很多方法的类创建”,创建什么呢?创建类的实例是吗?“创建的时候指针始终是空”,什么指针是空?楼主给的示例代码没出现指针。
总是返回空,是指DoSomeThing函数返回空?DoSomeThing的函数签名是怎样的呢?
楼主的DLL是怎么建的呢?
DLL有好多,可以导出类的有WIN32 DLL和MFC扩展DLL工程类型。例如MFC规则DLL工程类型则不允许导出类。
总之,楼主“无法实例化类”(从我对楼主描述的猜测只能是这样了)多半代码有问题。
楼主可以先别做成DLL,先把该类单独做成一个.cpp,然后在正常的程序中先使用该类,如果使用没问题,然后再新建DLL工程,把该类的代码全部黏贴过去。这样可能对于新手来讲,容易排错。
总是返回空,是指DoSomeThing函数返回空?DoSomeThing的函数签名是怎样的呢?
楼主的DLL是怎么建的呢?
DLL有好多,可以导出类的有WIN32 DLL和MFC扩展DLL工程类型。例如MFC规则DLL工程类型则不允许导出类。
总之,楼主“无法实例化类”(从我对楼主描述的猜测只能是这样了)多半代码有问题。
楼主可以先别做成DLL,先把该类单独做成一个.cpp,然后在正常的程序中先使用该类,如果使用没问题,然后再新建DLL工程,把该类的代码全部黏贴过去。这样可能对于新手来讲,容易排错。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询