VC++6.0生成DLL

一、生成DLL文件

1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++界面上会有一个树形文件结构。

2、看到这个文件结构就大概明白,Source Files是放源码的,也就是以.cpp为后缀的文件;Header Files就是以放头文件,也就是以.h为后缀的文件。这个StdAfx.h和StdAfx.cpp都是自动生成的,这个StdAfx.h是一些默认的配置,这个不需要我们去动它。反正有了这个文件,我们只要在我们的源文件(如test.cpp)中引入这个头文件就行了。

test.cpp的默认文件如下:

#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

3、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。代码如下:

#include "stdafx.h"
extern "C"_declspec(dllexport) int fun(int a,int b);
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

int fun(int a,int b) {
    return a+b;
}

extern "C"_declspec(dllexport) int fun(int a,int b)就是将这个方法导出,也就是把这个接口提供给其他程序。当然,如果还要定义其他的方法,都要用这个语句把这个接口暴露出来。

4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

二、调用DLL文件

1、菜单项“文件”——>“工程”——>“Win32 Console Application”。创建一个Console应用,为这个应用取名为“calling”。此时再VC++的界面会出现一个属性文件结构。

2、我们将上面生成的test.dll文件放到我们这个应用的calling目录下;然后在calling.app文件中填写如下代码:

 1 #include "stdafx.h"
 2 typedef int(*pfun)(int,int);
 3
 4 int main(int argc, char* argv[])
 5 {
 6     HMODULE hModule=::LoadLibrary("test.dll");
 7     pfun newfun=(pfun)::GetProcAddress(hModule,"fun");
 8     int i=newfun(1,2);
 9     printf("the result is %d\n",i);
10     ::FreeLibrary(hModule);
11     return 0;
12 }

3、最后一步进行编译,运行,正常来说能通过,但是编译通不过,说“HMODULE”这样的关键字没有定义。打开标准配置头文件stdafx.h,内容默认如下:

#if !defined(AFX_STDAFX_H__94A5270F_2E93_4D92_8279_BDF69332D688__INCLUDED_)
#define AFX_STDAFX_H__94A5270F_2E93_4D92_8279_BDF69332D688__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers

#include <stdio.h>

我们把这个文件添加如下:

#if !defined(AFX_STDAFX_H__9CD74EA8_AC0B_4487_98D5_E8704B271E95__INCLUDED_)
#define AFX_STDAFX_H__9CD74EA8_AC0B_4487_98D5_E8704B271E95__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#if def_DEBUG
#define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers
#endif

#include <stdio.h>
#include <Windows.h>

这样就能编译通过,我们这个应用就能调用DLL文件中定义的方法了。

时间: 2024-10-08 14:56:45

VC++6.0生成DLL的相关文章

vc 6.0 生成word报表

可以用于将数据 生产一个报表: // CMDIDemoDlg.cpp : implementation file // #include "stdafx.h" #include "CMDIDemo.h" #include "CMDIDemoDlg.h" #include"comdef.h" #include"atlbase.h" #include"msword.h" #ifdef _DE

VC6.0 设置动态链接库工程生成dll以及lib文件的位置

在"Projet"->"Settings..."的"Link"选项卡中 "Output file name"中设置dll的输出路径 Project options:中可以看到刚刚设置生成的DLL路径, 紧跟着就是LIB文件的路径,默认应该是DEBUG或者release的目录下, 这里需要手动修改LIB路径到你所需要的设置生成相应lib文件的所在路径,下面一句设置是Release模式下路径: /out:"../U

winform下mapxtreme2008 v7.0 生成release版提示找不到dll问题

在winform下基于mapxtreme2008 v7.0 生成了一个地图软件,用debug方式运行无误,但改为release版时提示缺少一大堆dll,如: 无法从C:\Program Files (x86)\Common Files\MapInfo\MapXtreme\7.0.0下复制AllType.DLL 等 经搜素,在C:/Windows/assembly/GAC_32/MapInfo.CoreEngine.Wrapper/7.0.0.220__93e298a0f6b95eb1/下包含所有

(Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译

Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目,选择类库,取名为JefferyChan,具体步骤如下图: 3.因为要调用Unity中的相关文件,所以这里要引入外部文件.首先在Unity的安装文件夹中找到UnityEngine.dll,我的路径是:D:\Program Files (x86)\Unity\Editor\Data\Managed 如

【VC++6.0】成功制作并使用lib库,转载

微软有许多头文件,这些头文件里面定义了许多函数,但是在头文件中你却找不到函数内容的身影,因为函数主体被保存在了lib库中.保存在库中有一个好处,那就是源代码不容易被发现,也就是说其中的一些技术别人不容易学到.废话少说,我们现在就开始制作lib库. 首先,第一步,打开VC++6.0,按Ctrl+N,选择工程选项卡,选中“Win32 Static Library”选项,输入工程名称,我们这里用“Lib库”,大家可以自己选择,至于路径,随便选一个吧,反正这次只是lib的实验. 然后点击“确定”,我们两

VC++6.0 sqlite3 配置、测试

/************************************************************************************* * VC++6.0 sqlite3 配置.测试 * 声明: * 本文仅仅是为了测试VC++6.0中是否可以使用sqlite3数据库,主要用于完成后续的 * 一些需求. * * 2015-10-21 晴 深圳 南山平山村 曾剑锋 *************************************************

解决Win7下VC++6.0与Office不兼容的问题

在Windows7下安装Visual C++ 6.0后,如果同时安装了Microsoft Office就会出现打开文件的时候出现异常,而导致VC6崩溃. 微软已经为我们解决了问题,开发出一个插件(FileTool.dll)来帮我们解决这个问题.http://support.microsoft.com/kb/241396/en-us#appliesto 具体方法: 1.下载FileTool.exe,并解压.下载地址http://support.microsoft.com/kb/241396/en-

VB6.0调用DLL

目录 第1章 VB6.0调用DLL    1 1 VC++编写DLL    1 1.1 使用__stdcall    1 1.2 使用 .DEF 文件    1 2 简单数据类型    2 2.1 传值(ByVal)    2 2.2 传址(ByRef)    3 2.3 传址(VarPtr)    4 2.4 转换为Variant    4 3 String    6 3.1 BSTR内存布局    6 3.2 StrPtr.VarPtr    7 3.3 示例代码    7 3.4 转换为V

[转]Microsoft Platform SDK 选择及在vc++6.0中的配置

Windows Platform SDK Download Sites: Windows Server 2003 PSDK February 2003 Edition,可以和VC6一起使用.并支持各种目标OS的最后一个版本的SDK. This edition of the SDK supports development for the following platforms: Windows Server 2003 Windows Advanced Server, Limited Editio