如何写类库

daview 2006-09-28 04:48:38
想写一个DLL库,在该库中放置一些自己写的控件类,计划采用WTL或ATL编写,但不想写成ACTIVEX形式注册的系统,有办法实现吗?

比如象.NET中写了DLL类库后就能应用了。

象MFC中写了类库后也能用(只限MFC中使用)
...全文
335 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
daview 2006-09-29
  • 打赏
  • 举报
回复
littlepboy(vc小p孩)

你的方法是否是基于扩展MFC的?我想写标准DLL的。
daview 2006-09-29
  • 打赏
  • 举报
回复
up
daview 2006-09-29
  • 打赏
  • 举报
回复
up again
DentistryDoctor 2006-09-28
  • 打赏
  • 举报
回复
一个比较广的问题。网上DLL相关的文章太多了,另外,核心编程,编程技术内幕一类的书,其中的DLL章节可以读一下。
littlepboy 2006-09-28
  • 打赏
  • 举报
回复
/* 导出定义 */
#define XXX_API _declspec(dllexport)

// 在你的类声明处加
class XXX_API CMyStatic : public CStatic
{
}

这一便可导出一个类
daview 2006-09-28
  • 打赏
  • 举报
回复
谢谢

zhucde(【風間苍月】★MVP★www.bezier.com.cn/bbs★虚拟)

这个我知道一点。

现在我想实现DLL中导出类,而不是API,可行吗?
skt01 2006-09-28
  • 打赏
  • 举报
回复
除了DLL,还要提供.h和.lib
zhucde 2006-09-28
  • 打赏
  • 举报
回复
VCKBASE中有篇简单介绍的文章 ,可以先了解一下:

创建“通用的”动态链接库(DLL)
VCKBASE
最近有许多人问如何让动态链接库的输出函数能够被任何支持动态链接库的语言调用。写动态链接库是很EASY的事情。但是,他们大多觉得输出的名字有乱字符(如:_vbShiftRight@1)。我想在这里就讨论一下如何让输出函数的名字中不出现乱子符。

首先,除非你绝对需要使用C++编码,否则我还是推荐使用C来写DLL。这里我想让创建的DLL可以在VB中使用。

你需要实现自己DLL的入口点函数和保证代码使用stdcall调用规范,但这要依赖你使用的编译器。例如,你可以在VC中使用“/entry:"DLLEntry"”命令行编译选项来创建自己的入口点。“DLLEntry” 可以参考下列代码:
/////////////////////////////////////////////////////////////////////
// DLL initialization and clean-up.
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch(fdwReason) {

case DLL_PROCESS_ATTACH:

// Perform any DLL initialization here
break;

case DLL_PROCESS_DETACH:

// Perform any DLL cleanup here
break;

}
return TRUE;
}

为了保证你使用正确的调用规范,要通知编译器使用stdcall规范和/或使用在windows.h(及相关文件)中定义的常量,如WINAPI等。通常DLL的代码如下:
/////////////////////////////////////////////////////////////////////
// Shifts bits right for integers.
WORD WINAPI vbShiftRight(WORD nValue, WORD nBits)
{
return (nValue >> nBits);
}

下一步是与你在微软文档中读到的内容相反。你需要创建一个DEF文件。这是你防止输出函数名不出现乱字符的唯一方式(如_vbShiftRight@1)。DEF文件的形式如下:

EXPORTS
vbShiftRight

下一步是在VB中调用这个函数,使用以下声明:
Declare Function vbShiftRight Lib "MYDLL.DLL" (ByVal nValue As Integer,
ByVal nBits As Integer)

As Integer

Sub Test()
Dim i As Integer
i = vbShiftRight(4, 2)
Debug.Assert i = 1
End Sub

如果你还想要更容易的方法从VB中调用,可以创建一个类型库。为此你需要创建和编译ODL(对象描述语言)文件。这个文件应该包含如下内容:
module MyModule {
[
helpstring("Shifts the bits of an integer to the right."),
entry("vbShiftRight")
]
short _stdcall vbShiftRight([in] short nValue, [in] short nBits);
};

当VB加载DLL的类型库时,函数名和参数将出现在VB的对象浏览器中。此外,如果用户不输入正确的参数类型,VB将产生一个错误。
zhucde 2006-09-28
  • 打赏
  • 举报
回复
遵循标准就行

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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