生成的DLL没有LIB

fengkewei 2009-06-14 09:22:28
生成的DLL没有LIB

我想应该是哪儿出问题了 但老找不到 用别人的例子又可以生成LIB 但我想实现比较好的宏定义 而且是隐式调用DLL 方便快捷

代码如下:



//testdll.h
#ifndef TESTDLL_H
#define TESTDLL_H



#include <iostream>
using namespace std;

#ifdef DCMDLL_EXPORT

#ifdef _cplusplus
#define EXPORT extern "C" __declspec(dllexport);
#else
#define EXPORT __declspec(dllexport);
#endif

#else
#ifdef _cplusplus
#define EXPROT extern "C" _declspec(dllimport);
#else
#define EXPORT __declspec(dllimport);
#endif

#endif

EXPORT int test();


#endif





//testdll.cpp
#include "testdll.h"



EXPORT int test()
{
cout << "Test success!" << endl;
return 0;
}


感觉主要是以下几个问题:
1.extern "C" , __declspec(dllexport) 的位置是否正确?(被宏定义引用后在函数前面的位置)

2.__declspec(dllimport)是否可以不要?

3.“项目——属性——C++——高级” 里“编译成C代码/编译成C++代码” 是否可以取消#ifdef _cplusplus的判断?

4.若此DLL被C#调用 是否要在 “项目——属性——C++——高级” 里 修改成stdcall约定?这里改是否跟函数名前面加"stdcall"声明一样?

谢谢!!不胜感激!
...全文
684 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengkewei 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 heartlesstoanyone 的回复:]
我也遇到过同样的问题,建立的DLL工程,头文件中缺少导出声明,结果就只生成了DLL,没有对应的LIB文件,后来把导出声明加上就好了。
[/Quote]

你所说的导出声明是什么?
fengkewei 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alan001 的回复:]
编辑def文件
[/Quote]

感觉编辑那个比较麻烦 可以不用么?
fengkewei 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyljerry 的回复:]
首先你用到了EXPORT宏,所以你的工程的属性中,要添加预编译宏 EXPORT,这样才能导出对应的接口,生成dll,lib

1.extern "C" , __declspec(dllexport) 的位置是否正确?(被宏定义引用后在函数前面的位置)
--- 可以,正确

2.__declspec(dllimport)是否可以不要?
--- 最好加上,表示规范,当不导出时,就导入

3.“项目——属性——C++——高级” 里“编译成C代码/编译成C++代码” 是否可以取消#ifdef _cplu…
[/Quote]

是否用C#调用的时候是不用LIB的DLL? 只需要DLL即可?这个DLL生成的时候有没有LIB呢?
老邓 2009-06-14
  • 打赏
  • 举报
回复
2.__declspec(dllimport)是否可以不要?
--------
不可以!

3.“项目——属性——C++——高级” 里“编译成C代码/编译成C++代码” 是否可以取消#ifdef _cplusplus的判断?
--------
还是不可以!如果你想C/C++混用的话。
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050228/13/3811997.html

纯资源dll?这样就没有lib的。
huxuanhui 2009-06-14
  • 打赏
  • 举报
回复
你用的什么编译器啊?
如果是 devcpp 生成lib是.a文件
不是 .lib
heartlesstoanyone 2009-06-14
  • 打赏
  • 举报
回复
我也遇到过同样的问题,建立的DLL工程,头文件中缺少导出声明,结果就只生成了DLL,没有对应的LIB文件,后来把导出声明加上就好了。
oyljerry 2009-06-14
  • 打赏
  • 举报
回复
首先你用到了EXPORT宏,所以你的工程的属性中,要添加预编译宏 EXPORT,这样才能导出对应的接口,生成dll,lib

1.extern "C" , __declspec(dllexport) 的位置是否正确?(被宏定义引用后在函数前面的位置)
--- 可以,正确

2.__declspec(dllimport)是否可以不要?
--- 最好加上,表示规范,当不导出时,就导入

3.“项目——属性——C++——高级” 里“编译成C代码/编译成C++代码” 是否可以取消#ifdef _cplusplus的判断?
--- 还是要加上,代码移植

4.若此DLL被C#调用 是否要在 “项目——属性——C++——高级” 里 修改成stdcall约定?这里改是否跟函数名前面加"stdcall"声明一样?
--- C#中调用,用stdcall的,标准dll,C#可以调用
alan001 2009-06-14
  • 打赏
  • 举报
回复
编辑def文件

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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