在VS工程里编译dll / 调用外部dll

这个问题昨天请教了一下大神,记录之。

1.编译dll

创建一个新项目,Win32控制台应用程序,这里选DLL。这样的话编译过后会自动在Debug目录下生成dll文件。

这样,会生成如下的目录:

其中头文件里的第2、3个是自动生成的,源文件里的1、3个是自动生成的。

我们只需要改动:

  在DllWithClass.h里写:

extern "C" _declspec(dllexport)//导出
float FunctionMultiply(float x, float y);

  这里第一行是用于DLL导出的,第二行是你所定义的功能函数的声明

  在DllWithClass.cpp里写:

extern "C" _declspec(dllexport)
float FunctionMultiply(float x, float y)
{
    return x*y;
}

  第一行对应.h里面的,注意不要打分号。然后就是定义函数体了。

  这样编译就会生成一个实现简单乘法的dll文件。

2.调用dll

建立一个Win32控制台应用程序,这里是为了生成.exe

调用dll有三步所需要做的事情:

1>代码部分,这里面只需要改动UseDllWithClass.cpp文件

添加如下代码:

#include "..\DllWithClass\DllWithClass.h"

int _tmain(int argc, _TCHAR* argv[])
{
    float FunctionResult = FunctionMultiply(1.2f, 5.0f);
    printf("%f", FunctionResult);
    getchar();
    return 0;
}

其中对于被调用.dll文件的头文件的引用,使用了相对路径。这里有个小知识:由于. vcxproj这个文件的内容代表着.exe文件所在的目录

  ..\表示着返回上一目录,所以这个查找的顺序是:从.exe返回上一级目录,再打开\DllWithClass目录,找到DllWithClass.h

为了方便,也可以直接把.dll文件放在.exe所在目录下,这样就可以直接#include "DllWithClass.h"

2>打开项目属性-链接器-常规

附加库目录里加上.lib文件所在的目录,同样可以使用相对路径:

如果.lib文件直接放在.exe文件目录下,这里可以不用设置(所以最方便的方式还是把.h/.lib/.dll全放在.exe文件的目录下)

3>打开项目属性-链接器-输入

附加依赖项里加上.lib文件名

完成这些设置,就可以直接调用封装在.dll文件里的函数了。

时间: 2024-08-29 02:50:49

在VS工程里编译dll / 调用外部dll的相关文章

C#调用外部DLL介绍及使用详解

一.      DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现. 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法.注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,而是根

在Delphi中静态调用DLL 引用外部Dll External Dll 导入Dll

  调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton;

ssis的script task作业失败(调用外部dll)

原文 ssis的script task作业失败 我的ssis作业包里用了一个script task,会查询一个http的页面接口,获取json数据后解析然后做后续处理,其中解析json引用了本地目录下的第三方的类库:Newtonsoft.Json.dll 在vs环境中调试包的时候报错 ? 1 2 3 4 5  在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Bo

Atitit.java jna 调用c++ dll 的总结

Atitit.java jna 调用c++ dll 的总结 1. JNA技术解密1 1.1. JNA工作原理1 2. JNA技术难点 Java—C和操作系统数据类型的对应表1 2.1. 1 2.2. JNA编程过程3 2.2.1. 跨平台.跨语言调用的第一原则:就是尽量使用基本.简单的数据类型,尽量少跨语言.平台传递数据!4 3. 参考4 1. JNA技术解密 1.1. JNA工作原理 JNA是建立在JNI技术基础之上的一个Java类库,它使您可以方便地使用java直接访问动态链接库中的函数.

那些年,用C#调用过的外部Dll

经常有人找到我咨询以前在csdn资源里分享的dll调用.算算也写过N多接口程序.翻一翻试试写篇随笔. 明华IC读写器DLL 爱迪尔门锁接口DLL 通用OPOS指令打印之北洋pos打印机dll 明泰非接触式RF读写器DLL 还有很多,以后补上.大多找不到了.也是懒得找了. 先抄点名词解释 DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息. DllImport属性应用于方法,要求最少要提供包含入

ASP.net/C#中如何调用动态链接库DLL

动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现.  动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法.注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,而是根据进程的需要按需载入,此时才能发

C#中dll调用方法

一.      DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现. 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法.注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,而是根

Matlab调用外部库函数方法和注意事项

在MATLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载成功,就 能直接在MATLAB中直接请求关于函数的任何信息.而当不再需要该库时,就应当及时把库文件从内存 中卸载以节省内存开销. 加载库 加载库加载库 加载库 语法:loadlibrary('shrlib','hfile') 其中shrlib为加载的动态链接库文件名(filename.dll),hfile为头文件名,它包含函数原型.例如,当加载包 含MATLAB中mx程序的libmx库时,可以使用下列语句. h

Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Application 有何妙用: 5. MJ0011 关于 Native Application 的文章整理: 6. 互联网上其他关于 Native Application 的文章整理: 7. 小结: 1. 引子: 其实在好久以前就看了 MJ0011 翻译的那个<Native 应用程序详细>系列的文