码迷,mamicode.com
首页 > 其他好文 > 详细

调用自己写的dll

时间:2019-09-10 15:07:54      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:lex   add   隐式   proc   export   程序   img   col   cad   

自己创建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

标签:lex   add   隐式   proc   export   程序   img   col   cad   

原文地址:https://www.cnblogs.com/lan0725/p/11497293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!