VS2010下生成dll的方法

1.首先创建生成dll的项目:打开VS2010,两种途经建立dll项目,基于MFC DLL的和基于Win32控制台应用程序的,这里选择基于Win32控制台建立。

a.文件--新建--项目(项目命名为myAPI)--Visual C++ --Win32--选择Win32控制台应用程序;
b.接下来下一步一直到如下图,程序类型选择DLL,如无特殊需要选择空项目完成,项目建立完毕;

2.定义头文件:为项目添加头文件myAPI.h 内部添加如下代码,

#ifndef _DLL_API
#define _DLL_API _declspec(dllexport)
#else
#define _DLL_API _declspec(dllimport)
#endif 

_DLL_API int ADD(int a,int b); 

内部定义一个ADD()函数接口,如需添加其他函数接口,可以接着继续定义,如

_DLL_API int MINUS(int a,int b);
_DLL_API int otherfunc(int,int,int); 

3.定义源文件:为项目添加相应的源文件myAPI.cpp 之后便是在该源文件中对函数进行定义,内部添加如下代码,

#include "myAPI.h" 

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

4.编译至通过,生成dll:这里有个小建议,因为dll项目不会生成exe,无法实时测试API,所以建议先在一般空项目内调试并测试通过API的函数体代码,然后再建立dll项目直接编译通过,这样更方便可靠。 回到正题,dll项目编译通过后有用的就是myAPI.h头文件以及Debug目录下新生成的myAPI.dll 和myAPI.lib文件,

5.调用dll:为了测试我们刚刚生成的dll,创建新的项目mytest。包含声明myAPI.h头文件,这里存放了定义的接口。将myAPI.dll文件放入新工程Debug文件夹下(.exe执行时需要调用,新项目如未编译则没有Debug文件夹,待编译后有了该文件夹再将dll文件放入)。将myAPI.lib文件放在与源文件及头文件相同路径下(编译时需要),接下来需要将.lib资源添加到项目中,两种方法。
一种方法是,在项目属性-链接器-输入中“附加依赖项”加入myAPI.lib文件(当然,有过未设置此处亦编译成功的经历,但不建议);
另一种调用方法是在新项目主程序中添加如下命令 则无需设置依赖项;

#pragma comment(lib,"myAPI.lib") 

至此,全部完成任务,编译通过后正常使用你自己定义的API了~

VS2010中使用CL快速 生成DLL的方法

方案一:
1、命令行中输入cl example.cpp,生成example.obj和example.lib文件。有可能还会提示“没有入口点”的错误。这是因为我们的CPP中是要生成dll文件的,并没有main()这样的主函数作为入口点。如果是C文件,则输入cl /c example.cpp

2、命令行中输入cl /def:example.def /dll:example.obj

方案二:

命令行中输入 cl /LD example.cpp example.def,直接生成example.dll(名字会因在def中定义的不同而有所不同)文件。有可能会提示(warning LNK4070: .EXP 中的 /OUT:example.dll 指令与输出文件名“example.exe”不同;忽略指令),这时生成的可能是example.exe文件。只要将example.exe改成example.dll就可以了,或者直接在加载dll的函数中加载example.exe.

注意:/LD一定要大写,不能写成/ld,这里可折腾了我快一天了才找出来的原因。

vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

问题说明:当安装VS2012之后,原来的.NET 4.0会被替换为.NET 4.5。卸载VS2012时,不会恢复.NET 4.0。

l 当VS2012安装后,VS2010的cvtres.exe就无法使用了。如果你的PATH环境变量中VS2010的工具路径第一个出现,而且链接器需要将.res文件转换为COFF 对象格式,就会导致LNK1123错误。
l 当VS生成PE文件头时,使用的cvtres.exe版本错误,不能与当前的.NET平台兼容。
解决方案:

参考:

http://stackoverflow.com/questions/10888391/link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-invalid-or-c

因为是cvtres.exe版本错误导致的结果,所以凡是能使VS链接器找到正确的cvtres.exe版本的方法都可以解决该问题。或者使VS链接器不生成COFF的方法都可以。

【方法一】
当前系统中存在两个cvtres.exe文件,版本不同。让VS2010使用.NET 4.5的cvtres.exe程序。

具体步骤:

重命名或删除:(vs2010安装的位置)C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

这样C:\Windows\Microsoft.NET\Framework\v4.0.30319 (.NET 4.5)中的cvtres.exe文件就可以被VS2010使用。

【方法二】
解决方法如下:
项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”。

说明:这种方法每个工程均需要修改配置。

【方法三】
安装:VS2010 SP1. 该版本应该是能使用.NET 4.5的,并配有正确的cvtres.exe版本。

注意:安装VS 2010 SP1 时会移除64-bit 编译器. 通过安装 VS 2010 SP1 compiler pack 能够重新获得。

【方法四】
卸载.NET 4.5,重装.NET 4.0

您可能感兴趣的文章:

  • VS2015 C#生成dll文件的方法(32/64)
  • C#生成DLL文件的方法小结
  • C#生成DLL文件的方法
  • c++生成dll使用python调用dll的方法
  • C++生成dll和调用dll的方法实例
  • 手动把asp.net的类生成dll文件的方法
  • 用VB生成DLL封装ASP连接数据库的代码
(0)

相关推荐

  • C#生成DLL文件的方法

    本文实例讲述了C#生成DLL文件的方法.分享给大家供大家参考.具体分析如下: Visual C#生成DLL文件 VisualC.Delphi或者VB等编程语言来编写的DLL文件,在编译完成以后,产生DLL文件已经是一个可以直接供计算机使用的二进制文件.但用Visual C#编译器生成的受管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实质上是一种中间语言(IL)代码,需要经过"下一代窗口服务"( Next Generation Windows Services,简写为N

  • C#生成DLL文件的方法小结

    使用csc命令将.cs文件编译成.dll的过程 很多时候,我们需要将.cs文件单独编译成.dll文件, 操作如下: 打开命令窗口->输入cmd到控制台->cd C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:\WINDOWS\Microsoft.NET\Framewor

  • 手动把asp.net的类生成dll文件的方法

    开始->程序->Microsoft Visual Studio 2005->Visual Studio Tools->Visual Studio 2005 命令提示 然后进入你的类目录,比如你的类文件是在E:/test/App_Code下面, 输入如下命令: csc /target:library File.cs 其中file.cs为你的类文件. 然后即可生成同名的dll文件!!! 自定义服务器控件分为两种: 1.一种是用*.aspx代码和*.cs代码编译后生成DLL,再添加引用到

  • VS2015 C#生成dll文件的方法(32/64)

    下面就为大家分享一下在vs2005中生成dll文件的步骤图文版 新建项目> 模板 > windows > 类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ClassLibrary2 { public class Class1 { private int _age; public i

  • c++生成dll使用python调用dll的方法

    第一步,建立一个CPP的DLL工程,然后写如下代码,生成DLL 复制代码 代码如下: #include <stdio.h> #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT int __stdcall hello()     {         printf("Hello world!\n");         return 0;     } 第二步,编写一个 python 文件:

  • 用VB生成DLL封装ASP连接数据库的代码

    这篇文章以VB生成的DLL封装ASP代码来连接数据库(以Access数据库为例). 一般情况下我们在用ASP连接Access的数据库时通常都会进行如下的操作 '//Proconn.asp <% dim ProConn set ProConn=Server.CreateObject("ADODB.CONNECTION") ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=&quo

  • C++生成dll和调用dll的方法实例

    本人根据网络多个相关博客帖子原创 1)生成dll 建立两个文件 xxx.h , xxx.cpp xxx.h内容如下: #ifdef BUILD_XXX_DLL#define EXPORT __declspec(dllexport)#else#define EXPORT __declspec(dllimport)#endif extern "C"{EXPORT void example(void);... ...} xxx.cpp内容如下: #define BUILD_XXX_DLL#i

  • VS2010下生成dll的方法

    1.首先创建生成dll的项目:打开VS2010,两种途经建立dll项目,基于MFC DLL的和基于Win32控制台应用程序的,这里选择基于Win32控制台建立. a.文件--新建--项目(项目命名为myAPI)--Visual C++ --Win32--选择Win32控制台应用程序: b.接下来下一步一直到如下图,程序类型选择DLL,如无特殊需要选择空项目完成,项目建立完毕: 2.定义头文件:为项目添加头文件myAPI.h 内部添加如下代码, #ifndef _DLL_API #define _

  • VS2010中lib与dll文件的生成与使用方法

    一. lib文件的简介 .lib是一种文件后缀,是Windows操作系统的库文件,有静态lib和动态lib之分: 1).静态lib文件:将导出的文件的声明和实现都放在lib文件中,此时lib文件主要包含函数的实现部分(cpp文件),例如类的函数定义.使用时只需配合相关的头文件,编译后程序将lib文件中的代码嵌入到宿主程序中,也就是最后的exe文件中,此时移除lib文件,程序可以正常运行,即编译后就不需要lib文件的支持了. 2).动态lib文件:相当于是一个h头文件,用于支持相应的dll文件的运

  • 使用python创建生成动态链接库dll的方法

    如今,随着深度学习的发展,python已经成为了深度学习研究中第一语言.绝大部分的深度学习工具包都有python的版本,很多重要算法都有python版本的实现.为了将这些算法应用到具体工程中,这些工具包也提供了不同类型的接口. 动态链接库(.dll,.so)是系统开发中一种非常重要的跨语言协作方式.把python语言写成的算法编译成动态库,能够提供给其他语言调用,这能够在很大程度上提高算法的开发效率. 但是,虽然python可以调用其他语言生成的动态库,python作为一种脚本语言,本身是不能直

  • ajax请求后台得到json数据后动态生成树形下拉框的方法

    如下所示: <select id="cc" class="easyui-combotree" style="width:580px;" name="rempId" data-options="required:true"></select> <script> $(function(){ $.ajax({ url:"departmentAction_getAllD

随机推荐