㈠ 用VS 如何由源代码生成DLL文件
1:创建DLL工程
文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)
填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成。
到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。
MyDLL.cpp内容如下:
testMyDLL.h内容如下
#pragmaonce
extern"C"_declspec(dllexport)intAdd(int&a,int&b);
现在可以编译通过了,但是程序运行就报错,还需要将MyDLL.dll复制到当前项目生成的可执行文件所在的目录。(这一点非常重要)
这里需要注意testMyDLL.cpp文件中调用lib的这句话:
#pragmacomment(lib,"..\debug\MyDLL.lib")
这里需要指明lib所在的文件夹,当然我们也可以在生成dll的MyDLL工程中,指定lib和dll文件的输出路径,直接到testMyDLL工程下。
注意:如果只有dll文件,那么必须在程序里面调用LoadLibrary()函数才能使用,如果有lib文件,那么有两种方式可以马上进行调用
㈡ codeblocks下如何生成lib文件
编译就行了 可以在Debug文件夹下找到你生成的DLL文件
DLL文件不能运行,如果要测试的话,需要新建一个Console项目或Win32项目来调用DLL中函数
㈢ win10 64vs怎么编译 libpng
1. 先下载 libpng(http://sourceforge.net/projects/libpng/files/)和libz(http://zlib.net/zlib-1.2.7.tar.gz),将libpng解压,如C:\workspace\libpng\。
2. 将libz解压,改名zlib放到libpng同级目录,如C:\workspace\zlib。
3. 进入libpng\projects\visualc71\,用visual studio打开工程文件,方案中会有三个子工程:libpng, pngtest, zlib。直接编译,不出意外会在Win32_DLL_Debug目录下和Win32_DLL_Debug\ZLib目录下生成zlib1d.dll, libpng15d.dll, libpng.lib和zlib.lib等库文件。
4.若报错,拷贝scripts/pnglibconf.h.prebuilt到源码目录,改名为pnglibconf.h
对于要用到这两个库的工程,主要需要做三件事:
1. C/C++常规->附加包含目录中把包含png.h等头文件的目录加进来
2. 链接器->输入->附加依赖项中加zlib.lib;libpng.lib。
3.通用属性->VC++ 目录->库目录中把放着zlib.lib和libpng.lib的目录加进来。
㈣ vs编译dll只生成了dll没有lub
您想问的是不是“为什么MS VS只生成dll,不生成lib”呢。
VS中使用模块定义文件(.def),用VS创建了一个项目,要做一个dll,一切完了之后发现只生成了dll,没有生成lib。
需要加入.deff的模块定义文件,加上之后,就生成.lib了。都知道在写DLL的时候,使用模块定义文件(.def)可以防止DLL里的命名变更。
㈤ 如何在vs中使用lib
你的问题是个很大的问题,牵涉到代码的重用、COM DLL的重用、Win32 API DLL的重用,等等。只能给你一些建议:
1)代码级重用是做不到的。C++的代码不能直接用在C#中。
2)很多现有的类库,例如OpenGL、DirectX等等。这些类库,都是以DLL形式出现的,要么是Win32 API DLL,要么是COM DLL。无论是哪一种,都可以在C#里面通过Interoperation重用。网上有很多DLLImport和COM Interop的例子和文档。
3)如果需要重用.lib和.h,就需要区别情况对待。如果.lib是纯粹的API函数库,那可以把.lib和.h编译成.dll,就可以在C#里面通过DLLImport来重用。如果.lib和.h里面有自定的类,就比较麻烦,最好是把源码抠出来(如果没有源码,就自己再在外面包一层自己的类),然后用COM的方法重新包装一下,再编译成DLL,这样就可以在C#里面用COM Interop来重用。
unmanaged code是一个很大很大的话题,建议你慢慢体会慢慢钻研,只有对Win32 API DLL、COM以及.NET中的Interoperation都已经熟悉了,才能融会贯通的处理代码重用的问题。一口是吃不下大胖子的。
转载
㈥ 你好,我现在用qt中要使用了一个vs2010编译的.lib静态库。
对于C语言而言,用于连接dll的连接lib是可以通用的,dll也是可以通用的。但是静态库目前而言并不是通用的,一般的处理方式是编译成dll,然后生成连接lib(a)库,引入项目,或者使用libtdl动态加载dll文件。
静态库不可通用的原因是,基础库相差太多,objmp甚至都无法识别使用vc默认选项编译出啦的obj文件格式。另外reimp不是用于这个用途的,是为dll的连接lib(a)文件提供转换的。
对于C++而言,所有二进制代码都是不可通用的,毕竟名称修饰都相差甚远。
㈦ vs如何生成dll的同时生成lib文件
1、在工程上点击右键,然后选择properties,进入后在左侧的树形目录中选择Linker->General
2、然后要保证Enable Incremental Linking (从上往下数是第四项)选项选择(Yes (/INCREMENTAL));
Ignore Import Library(第六项)选择No;
Link Library Dependencies (倒数第二项)选择YES;
3、调整运行即可。
㈧ 在vs2008中编写dll如何生成lib文件
2 在Application Settings窗口,Application type中选择 DLL; additional options中选择Empty project。点击完成
3 新建mydll.cpp和mydll.h两个文件
4 在mydll.h里面添加代码:
extern "C" _declspec(dllexport) int Min(int a, int b);
5 在mydll.cpp里面添加代码:
#include "mydll.h"
#include <stdio.h
int Min(int a, int b){printf("Min is called");
if (a = b) return b;
else return a;}6 编译程序7 把生的 .lib文件拷贝到另一个工程(要调用的DLL项目)的目录下,把.dll文件拷贝到另一个工程(要调用的DLL项目)的debug目录下
8 另一个项目的调用代码如下:
#pragma comment(lib,"MyDll.lib")
extern "C"_declspec(dllimport) int Min(int a,int b);
#include <stdio.h
int main(){int a;a = Min(8,10);
printf("比较的结果为%d",a);return 0;}
vs2008默认生成dll,但不生成Lib文件,方法是:在所建工程上单击鼠标右键,在弹出的右键菜单中选择添加--新建项....----模块定义文件,在该模块定义文件中写导出函数表,单击确定。然后在所建工程上单击鼠标右键,选择属性菜单,在弹出的属性对话框中链接器--输入--模块定义文件中填写刚才定义的def文件,然后再重新编译即可生成LIB文件。
新建-》win32项目-》-》dll-》-》导出符号(这样的话vs会自动帮你生产一些文件,然后自己可以在这个的基础上修改下)
生成好了后会在相应的目录下出现lib和dll两个文件。
使用的时候把lib和dll以及h文件导出就可以了。
其它工程中使用的时候用下面两种方式:
#pragma comment (lib,"MyDLL.lib")或者:HINSTANCE hInstLibrary = LoadLibrary(_T("MyDLL.dll"));//注意此处必须有_T()函数。
if (hInstLibrary == NULL){FreeLibrary(hInstLibrary);
如果在新建dll的时候选择空白的文件(即不用vs自带的帮你生成)的话,注意一定要自己手动添加def文件。
㈨ vs 命令行编译静态库
_declspec(dllexport) void test_print(char* sz_input);
这是动态链接库 -- dllexport ,dll是动态链接库。
不是你说的静态库。
动态链接库,应用程序调用它,编译链接时要有.lib, 运行时要有.dll
Debug\ -- 给别的程序用,要用 Release\,不能用 Debug\
char * __ptr64 sz_input;
__ptr64 -- 32位机上,指针sz_input截断为32位.
char * __ptr32 sz_input;
__ptr32 -- 64位机上,指针sz_input变32位
wchar_t,_MBCS -- 表明你要用双字节字符,那么程序就不应当用 单字节char 型。如果你要编的不是要用双字节字符,那么 就不要 wchar_t,_MBCS。