Home >Backend Development >Python Tutorial >Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

WBOY
WBOYforward
2023-04-08 12:45:013550browse

Create dynamic library

Dynamic library is a library file loaded when the program is running and does not occupy the size of the program itself.

Select dynamic library project:

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

##Create new .h and .cpp files:

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

# cat.h
#pragma once
extern "C" _declspec(dllexport) int sum(int a, int b);
# cat.cpp
#include "pch.h"
#include "cat.h"
extern "C" _declspec(dllexport) int sum(int a, int b) {
return a + b;
}

Select the Release version for dynamic library publishing. This example uses ×64 bit.

C Import dynamic library method one

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

#Create an empty C project and copy the .lib and .dll files in the dynamic library project to the current project :

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

In the C project, add the dynamic library header file. You don’t need to copy it to the current project, just add the existing item. It only needs to be logically introduced here, but When #include, use the path of the .h file. Both absolute and relative paths are acceptable.

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

#include 
#include "../../CATDLL/CATDLL/cat.h"
using namespace std;
#pragma comment(lib, "CATDLL.lib")
int main() {
cout << sum(1, 2) << endl;
return 0;
}

    h Header file: Contains information such as data structures, classes, functions and other information declared and output in the dll.
  • lib library file: contains the name and location of the project exported by the DLL. In the application executable file that calls the dll, what is stored is not the function code being called, but the project to be called in the DLL. memory address.
  • dll dynamic library: contains the actual content. When publishing, only the .exe file and the .dll file are required, in the same directory.
Can also be configured in Project-Properties-Linker-Input-Additional Dependencies:

Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries

Can be omitted: #pragma comment( lib, "CATDLL.lib")

C Method 2 of importing dynamic library

#include 
#include 
using namespace std;
typedef int (*PSUM)(int, int);
int main() {
HMODULE hMoudle = LoadLibrary(TEXT("CATDLL.dll"));
PSUM psum = (PSUM)GetProcAddress(hMoudle, "sum");
cout << psum(4, 5) << endl;
FreeLibrary(hMoudle);
return 0;
}

Python imports C dynamic library

Since C dll is 64-bit, Python must also use 64-bit Bit.

import os
from ctypes import *
os.chdir("D:Cat课件CAT_CODINGC++项目开发MFC进阶和动态库注入辅助PYTEST")
dll = cdll.LoadLibrary("CATDLL.dll")
ret = dll.sum(1, 2)
print(ret)

In this way, many commonly used functions can be made into dynamic libraries in C and can be called by other languages ​​such as C or Python.

The above is the detailed content of Two ways for C++ to call dynamic libraries and Python to call C++ dynamic libraries. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:51cto.com. If there is any infringement, please contact admin@php.cn delete