windows下dll实践-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3977292
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类:

2007-09-19 13:29:08

写惯了linux下的东西来到windows下真是不习惯, 特别是哪个vc, 让我搞不清楚我点一下鼠标到底系统后面做了什么。在linux下几乎每做一件事情我大概的知道系统在后面干了什么,就算出问题了,自己也好找到底在什么地方出问题了。windows就把我当傻子了,来个vc将编译、连接、编辑等等功能自己全给完成了, 但后面到底每一步是谁做的让我找的好辛苦啊,没办法了解一下也是挺好。
我是带着linux开发的思想走近windows的, 下面就写个简单的dll来实践一下。

-------------
在做我的实验前你得安装vc,设置以下简单的环境变量(其实设置该环境变量的目的就是让我们输入cl, link可以让操作系统一下子找到)
我的环境变量是:
c:\>echo %path%
c:\winnt\system32;c:\winnt;c:\winnt\system32\wbem;c:\program files\microsoft visual studio\vc98\bin;c:\program files\microsoft visual studio\common\tools\winnt;c:\program files\microsoft visual studio\common\msdev98\bin;c:\program files\microsoft visual studio\common\tools;c:\program files\microsoft visual studio\vc98\bin

我的环境:
microsoft windows 2000 [version 5.00.2195]
(c) 凯发k8官网下载客户端中心的版权所有 1985-2000 microsoft corp.

c:\>cl
microsoft (r) 32-bit c/c optimizing compiler version 12.00.8168 for 80x86
凯发app官方网站 copyright (c) microsoft corp 1984-1998. all rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

c:\>link
microsoft (r) incremental linker version 6.00.8168
凯发app官方网站 copyright (c) microsoft corp 1992-1998. all rights reserved.

usage: link [options] [files] [@commandfile]
/* 哎, 习惯了命令行没办法, 这些全部在哪个win r: cmd 中输入的。 */
-----------------
/*
  网上介绍什么是dll, dll有什么好处 ...... 东西太多了, 我就不在这里多说了, 以实践为主。
  你不需要vc来编辑下面的东西, 使用你感觉可以的文本编辑器就可以了(记事本、editplus ......)
  也就是我将编辑和编译分开了, 让我们明白我干了什么, 要是用哪个vc这一点那一点我就糊涂了, 没办法还没进化到使用vc的层次来。

  你先建立一个新的文件夹来保存我们做的小测试程序:
  我的就叫gandll, 下面是源码:
 */
=================
/**
 * gandll\gandll.h
 * 这个是gandll.h文件内容
 * 那个破文件路径用个"\"这样的, linux下是"/", 总是搞错了。
 */
#ifdef _cplusplus
extern "c"
{
#endif

#define    gan_export32    __declspec(dllexport)

gan_export32 int add2(int a, int b);

#ifdef _cplusplus
}
#endif

--------------
/**
 * gandll\gandll.c
 * 这个是gandll.c文件
 * 编译命令是:
 *    cl /ld /w4 gandll.c
 */
#include "gandll.h"

int add2(int a, int b)
{
  return (a b);
}

================
这是我编译的:
c:\gandll>cl /w4 /ld gandll.c
microsoft (r) 32-bit c/c optimizing compiler version 12.00.8168 for 80x86
凯发app官方网站 copyright (c) microsoft corp 1984-1998. all rights reserved.

gandll.c
microsoft (r) incremental linker version 6.00.8168
凯发app官方网站 copyright (c) microsoft corp 1992-1998. all rights reserved.

/out:gandll.dll
/dll
/implib:gandll.lib
gandll.obj
   creating library gandll.lib and object gandll.exp

c:\gandll>dir
 驱动器 c 中的卷是 system
 卷的序列号是 68fa-7398

 c:\gan\ts\gandll 的目录

2007-09-19  11:30                 .
2007-09-19  11:30                 ..
2007-09-19  11:34                  167 gandll.h
2007-09-19  11:36                  116 gandll.c
2007-09-19  12:05                  313 gandll.obj
2007-09-19  12:05               40,960 gandll.dll
2007-09-19  12:05                1,896 gandll.lib
2007-09-19  12:05                  527 gandll.exp
2007-09-19  11:37                 dlltest
               6 个文件         43,979 字节
               3 个目录  4,724,350,976 可用字节

执行完该编译后你就可以在该目录下看到多出来的gandll.dll, gandll.lib, gandll.exp三个文件。 当然哪个dlltest目录是我自己新建的, 用来存放测试程序用的(接下来的测试程序就是在哪个目录下完成的)。

================
/*
 * 这个就是哪个测试程序文件(文件名: gandll/dlltest/dlltest.h)
 */
#ifndef dlltest_h
#define    dlltest_h

#define    gan_import32    __declspec(dllimport)

gan_import32 int add2(int a, int b);

#endif /* #ifndef dlltest_h */

-----------------
/*
 * 这个哪个测试程序文件(文件名: gandll/dlltest/dlltest.c)
 */
#include
#include "dlltest.h"

int main(int argc, char **argv)
{
    printf("test dll values: %d \n", add2(1, 2));

    return (0);
}
======================
编译的办法(将哪个gandll.dll, gandll.lib文件复制到该目录下面):
c:\gandll\dlltest>cl gandll.lib /w4 dlltest.c
microsoft (r) 32-bit c/c optimizing compiler version 12.00.8168 for 80x86
凯发app官方网站 copyright (c) microsoft corp 1984-1998. all rights reserved.

dlltest.c
dlltest.c(4) : warning c4100: 'argv' : unreferenced formal parameter
dlltest.c(4) : warning c4100: 'argc' : unreferenced formal parameter
microsoft (r) incremental linker version 6.00.8168
凯发app官方网站 copyright (c) microsoft corp 1992-1998. all rights reserved.

/out:dlltest.exe
gandll.lib
dlltest.obj

c:\gandll\dlltest>dir
 驱动器 c 中的卷是 system
 卷的序列号是 68fa-7398

 c:\gan\ts\gandll\dlltest 的目录

2007-09-19  11:37                 .
2007-09-19  11:37                 ..
2007-09-19  11:39                  149 dlltest.h
2007-09-19  11:41                  143 dlltest.c
2007-09-19  11:36                1,896 gandll.lib
2007-09-19  11:36               40,960 gandll.dll
2007-09-19  13:20                  514 dlltest.obj
2007-09-19  13:20               40,960 dlltest.exe
               6 个文件         84,622 字节
               2 个目录  4,724,195,328 可用字节

c:\gandll\dlltest>dlltest
test dll values: 3
==========================
以上就是我的测试事例, 下面在说说为什么吧, 以及每个这样做的原因。
转到下篇写吧:::


阅读(1923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图