社区
进程/线程/DLL
帖子详情
VC的dll问题
yanzi5897
2006-07-12 02:12:55
我用vc写了一个类,是一个图像类,其中封装了对于图像的各种操作,编译后生成lib,可以在vc里面调用该类的所有方法,现在,我希望能把这个类改成一个dll形式的,以便用vc或其他语言二次开发,现在有几个问题:
1、如果用delphi做二次开发,delphi如何调用vc的dll,我试过几次,总是不成功。
2、把现在的lib源码变成dll源码是否费时费力,需要做那些工作?
3、如果调用成功,delphi是否可以实例化该类的对象并调用该类的所有方法?
...全文
443
18
打赏
收藏
VC的dll问题
我用vc写了一个类,是一个图像类,其中封装了对于图像的各种操作,编译后生成lib,可以在vc里面调用该类的所有方法,现在,我希望能把这个类改成一个dll形式的,以便用vc或其他语言二次开发,现在有几个问题: 1、如果用delphi做二次开发,delphi如何调用vc的dll,我试过几次,总是不成功。 2、把现在的lib源码变成dll源码是否费时费力,需要做那些工作? 3、如果调用成功,delphi是否可以实例化该类的对象并调用该类的所有方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yanzi5897
2006-07-14
打赏
举报
回复
算了,结帖啦,问题我自己想办法解决。
gdsdyl
2006-07-14
打赏
举报
回复
只有扩展DLL才能导出类,用LIB吧
yanzi5897
2006-07-14
打赏
举报
回复
真的可以吗?我先试试。
involute
2006-07-13
打赏
举报
回复
有!有其他办法的
对于不能应用导出类的场合,可以进行对导出类的DLL二次封装。举例:
extern "C"
{
__declspec(dllexport) BOOL XXX_Init(void);
__declspec(dllexport) int XXX_Operation1(int iParam);
__declspec(dllexport) int XXX_Destory(void);
}
#include "XXX.h"
CXXXX * pXXX = NULL;//DLL中导出的类设为DLL的一个全局变量
__declspec(dllexport) BOOL XXX_Init()
{
pXXX = new CXXX(.....);
if(pXXX==NULL)
{
SetLastError(...);
return FALSE;
}
pXXX->Create(...);
pXXX->Init(...);
...
//其它初始化操作
}
__declspec(dllexport) int XXX_Operation1(int iParam)
{
if(pXXX = NULL)
return -1;
return pXXX->Operation1(iParam);
}
......
//其他对象操作的封装
__declspec(dllexport) int XXX_Destory(void)
{
if(pXXX = NULL)
return -1;
delete pXXX;
}
以上仅为示例,使用的时候只需要先使用Init然后操作完毕后调用Destory就行了。
甚至还可以用回调函数封装需要重载的虚函数,让COM见鬼去吧。
whwjn
2006-07-13
打赏
举报
回复
用COM吧,呵呵,看看vckbase上面杨老师的文章
yanzi5897
2006-07-13
打赏
举报
回复
就只能用com,没有其他办法了?恩,又要去看书~~~
qrlvls
2006-07-13
打赏
举报
回复
Delphi和VC对扩展dll的生成格式是不同的,分别遵从不同的规范,因此调用是很困难的
建议使用COM的方式封装
yanzi5897
2006-07-13
打赏
举报
回复
那我写的图像类可以导出吗?
whwjn
2006-07-12
打赏
举报
回复
规则DLL是可以导出一般C++类的,只是不能导出MFC类及其派生类。
yanzi5897
2006-07-12
打赏
举报
回复
delhi可以调用lib吗?
Kudeet
2006-07-12
打赏
举报
回复
那么有这样一个问题,只有扩展dll才能导出类,但是delphi只能调用正规dll,那么delphi如何实例化该类并调用它的成员函数呢?
====
要么用COM,要么用LIB,其他的办法还没有
yanzi5897
2006-07-12
打赏
举报
回复
那么有这样一个问题,只有扩展dll才能导出类,但是delphi只能调用正规dll,那么delphi如何实例化该类并调用它的成员函数呢?
syy64
2006-07-12
打赏
举报
回复
是这样的,只有扩展DLL才能导出类。
yanzi5897
2006-07-12
打赏
举报
回复
另外,我在vc技术内幕这本书里看到说,正规dll不能导出c++类、成员函数和重载函数。
yanzi5897
2006-07-12
打赏
举报
回复
com我不是很懂,另外,做成规则dll,用vc生成框架,在新建工程那里,是Win32Dynamin-Link Libaray这个吗?把自己的源码加进去直接编译,会报很多错,能不能麻烦二楼说详细一点,我比较菜。
EddieCai
2006-07-12
打赏
举报
回复
你可以用wizard生成COM框架,因为你原来的类是MFC写的,那么你就选择这个框架支持MFC.
因为你原来就是一个类了,所以移植到COM里来很容易的。要注意的就是接口函数的参数类型一定要用标准的COM支持的类型。
syy64
2006-07-12
打赏
举报
回复
1、做成规则DLL;
2、用向导生成DLL框架,然后加上自己的东西;
3、是啊。
EddieCai
2006-07-12
打赏
举报
回复
建议你用COM的方式封装成dll,这样可以给很多种语言方便调用。
VC
6LineNumberAddin.
dll
VC
6.0 中添加行号工具
VC
6.0 中添加行号工具
ms
vc
r100.
dll
各种版本
ms
vc
r100.
dll
是与VS2010开发套件同步发行的运行时库文件,类似于
VC
2005、
VC
2008等库文件安装包,它也可以通过直接下载微软的
VC
2010库文件安装包来获得。 因为很多软件是用VS2010开发的,安装程序中会把它包含在内...
mfc42d.
dll
【64位+32位】
应用情况:运行vs或
vc
的时候,有时候会报错,出现缺少mfc42d.
dll
使用方法。 通常是将
dll
文件复制到“ X:\Windows\system32 ” (X代表您系统所在目录盘符,如:C:\Windows\system32 ) 目录下。 多数时候不需要...
ms
vc
rtd.
dll
VC
++的....重装时会丢掉
32位libmysql.
dll
和32位libmysql.lib
在用mfc进行编程与数据库进行连接的时候 ,往往
vc
6.0编译不了win7 64位的文件,这时候就需要32位操作文件了。
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章