调用自己写的dll

Posted lan0725

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用自己写的dll相关的知识,希望对你有一定的参考价值。

自己创建dll项目,编译后拿到.dll文件和.lib文件。

.h文件如下:(为了测试 没加extern “c” 函数前面也没加调用约定 最好加上_stdcall)

// MyDll.h: interface for the MyDll class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MYDLL_H__7FB2193F_D30D_434B_A7DC_4A3A611D38BB__INCLUDED_)
#define AFX_MYDLL_H__7FB2193F_D30D_434B_A7DC_4A3A611D38BB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

_declspec(dllexport) int Plus(int x, int y);
_declspec(dllexport) int Sub(int x, int y);
_declspec(dllexport) int Div (int x, int y);

#endif // !defined(AFX_MYDLL_H__7FB2193F_D30D_434B_A7DC_4A3A611D38BB__INCLUDED_)

 

.cpp文件如下:

 1 // MyDll.cpp: implementation of the MyDll class.
 2 //
 3 //////////////////////////////////////////////////////////////////////
 4 
 5 #include "stdafx.h"
 6 #include "MyDll.h"
 7 
 8 //////////////////////////////////////////////////////////////////////
 9 // Construction/Destruction
10 //////////////////////////////////////////////////////////////////////
11 int Plus(int x, int y)
12 {
13     return x+y;
14 }
15 int Sub(int x, int y)
16 {
17     return x-y;
18 }
19 int Div (int x, int y)
20 {
21     return x/y;
22 }

可用depends查看.dll文件:

技术图片

有两种方法 显示链接隐式链接

 

1 显示链接

 

#include "stdafx.h"
#include <windows.h>


int main(int argc, char* argv[])
{
    // 1 定义函数指针
    typedef int(*lpPlus)(int,int);
    // 2 声明函数指针变量
    lpPlus myplus;
    // 3 动态加载dll到内存中
    HINSTANCE hModule = LoadLibrary("TestDll.dll");
    // 4 获取函数地址 函数名使用depends可获得
    myplus = (lpPlus)GetProcAddress(hModule,"?Plus@@YAHHH@Z");
    // 5 调用函数
    int x = myplus(2,3);
    return 0;
}

 

2 隐式链接

#include "stdafx.h"
#include <windows.h>
//1
#pragma comment(lib,"TestDll.lib")
//2 
_declspec(dllimport) int Plus(int x, int y);

int main(int argc, char* argv[])
{
    //  3 调用函数
    int x = Plus(2,3);
    return 0;
}

--------------

上面是用dllexport导出,还有一种导出方式.def。这种方式可以隐藏函数名

创建dll项目,头文件和app文件和普通程序一样,项目中新增比如叫test.def 定义如下:

EXPORTS

Plus @12
Sub @13
Div @15 NONAME

 

以上是关于调用自己写的dll的主要内容,如果未能解决你的问题,请参考以下文章

无法找到指定dll库文件skinH_EL.dll中的输出命令skinH_Attach_EX_

VS2017写的exe调用Delphi 7写的DLL

易语言怎么调用C写的DLL

如何在linux启动完成之后调用自己写的sh脚本,谢谢!

PB调用C#编写的DLL

PB调用C#编写的DLL