显示调用c++动态链接库

来源:互联网 发布:搜索字幕的软件 编辑:程序博客网 时间:2024/06/05 05:39


1.动态链接库生成

<span style="background-color: rgb(255, 255, 255);">//operator.h#ifndef OPERATOR_H#define OPERATOR_H#include <stdio.h>#include <stdlib.h>#ifdef __cplusplusextern "C"{#endifint Add(int a, int b);int Sub(int a, int b);#ifdef __cplusplus}#endif#endif</span>
<span style="background-color: rgb(255, 255, 255);"></span>
<pre name="code" class="html"><span style="background-color: rgb(255, 255, 255);">//operator.cpp#include "operator.h"int Add(int a, int b){return a + b;}int Sub(int a, int b){return a - b;}</span>
<pre name="code" class="html">//operator_dll.h#ifndef _OPERATOR_DLL_H#define _OPERATOR_DLL_H#define DLLEXPORT __declspec(dllexport)extern "C"  DLLEXPORT int Operator(int a, int b, int *result);#endif
//operator_dll.cpp
#include "operator_dll.h"#include "operator.h"DLLEXPORT int Operator(int a, int b, int *result){*result = Add(a, b) + Sub(a, b);if (result){return 1;}else{return 0;}}

//test_main#include "operator_dll.h"#include <stdio.h>int main(void){int a, b, result;a= 4;b = 3;    Operator(a, b, &result);printf("operator result : %d \n", result);return 0;}

2.动态链接库的调用
<pre name="code" class="html">#include <Windows.h>#include <string>using namespace std;typedef int    (*OperatorFunc)(int ,int ,int* );void test_operator_dll(){int result;result = 0;OperatorFunc _OperatorFunc;HMODULE handle = LoadLibrary("mydll.dll");if (handle){_OperatorFunc = (OperatorFunc)GetProcAddress(handle, "Operator");if (_OperatorFunc){_OperatorFunc(4, 3, &result);printf("result = %d", result);}else{printf("GetProcAddress() is failed : %d\n", GetLastError());}FreeLibrary(handle);}else{printf("LoadLibrary() is failed : %d \n", GetLastError());}}int main(void){test_operator_dll();return 1;}

3.运行结果:
result = 8
                                             
0 0
原创粉丝点击