首页
社区
课程
招聘
如何能够从一个.CPP文件创建一个DLL文件,不使用类似什么.DEF什么的,而是使用类似下面的语句,关键我很懒,很想把所有的东西都放在一起来做
发表于: 2008-1-17 09:00 7013

如何能够从一个.CPP文件创建一个DLL文件,不使用类似什么.DEF什么的,而是使用类似下面的语句,关键我很懒,很想把所有的东西都放在一起来做

2008-1-17 09:00
7013
#pragma  comment(linker,"/subsystem:windows /dll")
#pragma  comment(linker,"/out:debug/mytest.dll")

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 243
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
使用 dllexport 来导出函数
指定共享段属性用#pragma  comment(linker,"/SECTION:.MYSEC,RWS")
这样就可以省去def文件
2008-1-17 09:38
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
3
呵呵,除了使用 dllexport 来导出函数外,还可以使用

例如:
int __stdcall MyExportFunction(int iTest);
要导出这个函数,可以用
#pragma comment(linker,"/EXPORT:MyExportFunction=_MyExportFunction@4")

其中:编译生成的_MyExportFunction@4函数名,跟调用约定,函数名,函数参数的个数有关。
2008-1-17 09:52
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我这样写,编译通不过去呢
extern "C" _delcspec(dllexport) _stdcall int Max(int a, int b)
{
        if(a>=b)return a;
        else
        return b;
}
2008-1-17 10:19
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
5
_delcspec写错了,应该是_declspec
2008-1-17 10:25
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
#include "windows.h"  

#pragma  comment(linker,"/subsystem:windows /dll")
#pragma  comment(linker,"/out:debug/mytest.dll")
#pragma comment(lib,"ws2_32.lib")

extern "C" _declspec(dllexport) _stdcall int Max(int a, int b)
{
        if(a>=b)return a;
        else
        return b;
}

编译后,如下错误。。。。。。。。。
Deleting intermediate files and output files for project 'mytest - Win32 Debug'.
--------------------Configuration: mytest - Win32 Debug--------------------
Compiling...
main.cpp
d:\mytest\main.cpp(8) : warning C4518: 'int ' : storage-class or type specifier(s) unexpected here; ignored
d:\mytest\main.cpp(8) : warning C4230: anachronism used : modifiers/qualifiers interspersed, qualifier ignored
Linking...
main.obj : warning LNK4070: /OUT:debug/mytest.dll directive in .EXP differs from output filename "Debug/mytest.exe"; ignoring directive
   Creating library debug/mytest.dll and object debug/mytest.exp
LINK : fatal error LNK1104: cannot open file "Debug/mytest.lib"
Error executing link.exe.

mytest.exe - 1 error(s), 3 warning(s)
2008-1-17 10:33
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
7
哈哈,我修改了一下:

***************************************************************

#include "windows.h"  

#pragma  comment(linker,"/subsystem:windows /dll")
#pragma  comment(linker,"/out:jiang.dll") 
#pragma comment(lib,"ws2_32.lib")

extern "C" __declspec(dllexport) int __stdcall  Max(int a, int b)

  if(a>=b)return a; 
  else 
  return b; 


*************************************************************
然后保存为文件:c:\jiang.cpp

接下来,命令行编译:

cl  /c  jiang.cpp

link jiang.obj

上传的附件:
2008-1-17 14:03
0
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
哈哈,我修改了一下:

***************************************************************

#include "windows.h"

#pragma comment(linker,"/subsystem:windows /dll")
#pragma comment(linker,"/out:jiang.dll")
#pragma comment(lib,"ws2_32.lib")



大牛,领教!!!

最近俺们也在学编程,呵呵
2008-1-17 15:14
0
雪    币: 223
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
谢谢
学习了。
2008-1-17 17:05
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢多谢,试验成功了

我想问的问题是:关于这三条命令该如何弄,才能保证下次开机时不用再次输入呢???
是写入批处理吗???
上传的附件:
2008-1-18 08:41
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
11
直接在windows里面添加环境变量,在我的电脑上点右键,选择。。。。
2008-1-18 08:48
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不好意思,我太菜了,关于配置环境变量,我还是弄不好
上传的附件:
2008-1-18 09:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
faint 直接在环境变量里加
2008-1-19 11:02
0
游客
登录 | 注册 方可回帖
返回
//