1.动态链接库生成
<span style="background-color: rgb(255, 255, 255);">//operator.h #ifndef OPERATOR_H #define OPERATOR_H #include <stdio.h> #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif int 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; }
<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; }
result = 8