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 打赏 收藏 转发到动态 举报
写回复
用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,这样可以给很多种语言方便调用。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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