DLL初学者指南(非MFC)

环境:Visual C++ 2003, Windows

源代码: DLL Project的源代码及测试项目

我正在学习DLLs,谈不上对其有什么高屋建瓴的见解;本文只是(通过)编码让你看到并想知道代码是如何运行的。在本文中,我假定你知道如何使用你的编译器特性,比如设置目录路径等等。

为了建立项目,请选择Win32 控制台项目(Win32 Console Application),并且在应用程序设置标签(the advanced tab)上,选择DLL和空项目选项。DLLs可能并不如你想像的那样难。首先写你的头文件(header file);称为DLLTutorial.h。这个文件与其它头文件一样,其中只是一些函数的原型。

#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream>
#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
extern "C"
{
    DECLDIR int Add( int a, int b );
    DECLDIR void Function( void );
}
#endif

前面两行指示编译器只包含这个文件一次。extern "C"告诉编译器该部分可以在C/C++中使用。

在VC++中这里有两个方法来导出函数:

1、使用__declspec,一个Microsoft定义的关键字。

2、创建一个模块定义文件(Module-Definition File即.DEF)。第一种方法稍稍比第二种方法简单些,但两种都工作得很好。

__declspec(dllexport)导出函数符号到在你的DLL中的一个存储类。当下面一行被定义时我定义DECLDIR来运行这个函数,

#define DLL_EXPORT

同时也导入函数如果下面一行

#define DLL_EXPORT

没有在源文件中出现。在此情况下,你将导出函数Add(int a, int b)和Function()。

现在,你需要写一个将要称为DLLTutorial.cpp的源文件。

#include <iostream>
#include "DLL_Tutorial.h"
#define DLL_EXPORT
extern "C"
{
    DECLDIR int Add( int a, int b )
    {
    return( a + b );
    }
    DECLDIR void Function( void )
    {
    std::cout << "DLL Called!" << std::endl;
    }
}

时间: 2024-10-29 06:58:13

DLL初学者指南(非MFC)的相关文章

VC++动态链接库(DLL)非MFC DLL介绍

  4.1一个简单的DLL 第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数. 如图6,在VC++中new一个Win32 Dynamic-Link Library工程dllTest(单击此处下载本工程附件).注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是第5.6节要讲述的MFC 动态链接库. 图6 建立一个非MFC DLL 在建立的工程中添加lib.h及lib.cpp文件,源

在非MFC程序中引用CString

CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen,strcpy,strstr等等,本文讨论的是在非mfc程序中使用CString类的方法,算是个引子,如果有更好的实现方法,欢迎大家讨论. 为了使用CString类,首先源文件必须是以cpp结尾的,这是因为vc默认对不同的扩展名采用不同的编译方法和错误检查,mfc的支持文件Afx.h只有由cpp为扩

《C#初学者指南》一导读

前言 C#初学者指南 欢迎阅读本书. C#(读作"c sharp")是一种易学的.成熟的编程语言.同时,它也是.NET Framework 的一部分..NET Framework是很大的一个技术集合,它包罗万象,以至于初学者往往不知从何入手.如果你也是一名初学者,那么本书非常适合你,因为本书就是专门为.NET初学者所编写的教程. 作为初学者的教程,本书并不会介绍.NET Framework中的每一种技术.相反,本书涵盖C#和.NET Framework 语言中最重要的主题,掌握了这些内

非MFC工程中使用MFC库

目录(?)[-] 需求说明 常见问题 问题分析 参考解决方法 我的解决方案 Stdafxh的原理     需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console Application.MFC Application.Win32 Project等.在创建MFC工程时,通过IDE的向导会自动帮我们创建相应的类文件和包含必需的头文件,但有时候我们需要在非MFC工程中包含MFC的库.至于为什么会有这个需要,为何不在一开始就创建MFC工程呢?可能有两种原因:1.在

在非MFC工程中,如何使用MFC的CString类?

问题描述 在非MFC工程中,如何使用MFC的CString类? 解决方案 解决方案二:摘的:转非MFC工程使用CString2011-05-1316:10187人阅读评论(0)收藏举报在VS2008下如果建非MFC工程而又使用CString会出现如下错误:1.errorC2065:"CString":未声明的标识符解决方法:将#include<afx.h>添加在程序开始处,或将其放在stdafx.h预编译头中.2.再编译提示:fatalerrorC1189:#error:B

《C语言编程——零基础初学者指南(第3版)》一2.3 数据的种类

2.3 数据的种类 C语言编程--零基础初学者指南(第3版)C程序所使用的数据由数字.字符和单词组成.程序将数据处理为有意义的信息.在C程序设计中有各种不同类型的数据,最常见的三种数据类型是: 字符整型数浮点型数(也称为实数)提示 你也许会问:"我需要具备多少数学知识?!这不公平!"别急,轻松点,C语言会帮你处理数学的问题.不一定非要学会2+2才能写C程序.但是,你必须要理解数据类型,否则无法为自己的程序选择合适的类型. 2.3.1 C语言中的字符 C语言中的字符是计算机可以表示的任意

在非MFC的win 32程序里面能够使用CString类

论坛有会员用到了.,今天给大家说说CSring如何在非mfc下的调用第一:先要包含 #include "afx.h" 包含之后会报windows.h重复定义我们需要把这个头文件包含在windows.h的前面 第二:alt+f7 快捷键 设置---或者菜单--工程--设置---点击常规--使用MFC作为静态的   或者可以设置MFC为共享的DLL 第三:alt+f7 快捷键 设置---或者菜单--工程--设置---切换到C\C++ 点击Code Generation --use-run-

《C语言编程——零基础初学者指南(第3版)》一2.2 main()函数

2.2 main()函数 C语言编程--零基础初学者指南(第3版)C程序中最重要的部分是main()函数.前面讨论的两个程序中都有main()函数.main()是一个C函数,不是C命令.现在还不需要区分它们.函数是执行某些任务的例程.C程序由一个或多个函数组成.每个程序必须包含一个main()函数,除此之外,有些函数是你创建的.函数与命令的区别在于,函数名后紧跟一对圆括号.以下所示都是函数: main() calcIt() printf() strlen() 而这些都是命令: return wh

《C语言编程——零基础初学者指南(第3版)》一导读

前言 C语言编程--零基础初学者指南(第3版)前言内容 本书的读者对象本书与众不同之处本书的设计要素轻松愉快地学习C语言现在要做什么看到朋友们都找到了合适的C语言编程工作,而自己却吃着闭门羹?很想学习C语言,却缺乏持续的动力?想用热门的程序设计语言给老旧不堪的电脑进行热身?本书就是你所需要的! 本书打破一般计算机书籍居高临下的说教方式,根据读者自身的程度循序渐进地讲解知识要点.它就像是读者的好朋友,坐在身旁教你C语言,用平实简单的语言而非"计算机行话",让读者在轻松愉快的气氛中学习.与