Rumah > pembangunan bahagian belakang > Tutorial Python > Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

WBOY
Lepaskan: 2023-04-08 12:45:01
ke hadapan
3551 orang telah melayarinya

Buat pustaka dinamik

Pustaka dinamik ialah fail pustaka yang dimuatkan semasa atur cara berjalan dan tidak menempati saiz program itu sendiri.

Pilih projek perpustakaan dinamik:

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

Buat fail .h dan .cpp baharu:

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

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

Pilih versi Keluaran untuk keluaran perpustakaan dinamik Contoh ini menggunakan ×64 bit.

C++ import kaedah perpustakaan dinamik satu

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

Buat projek C++ kosong baharu dan salin fail .lib dan .dll dalam projek perpustakaan dinamik ke semasa projek :

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

Dalam projek C++, apabila menambah fail pengepala perpustakaan dinamik, anda tidak perlu menyalinnya ke projek semasa, cuma tambah item yang sedia ada hanya perlu diperkenalkan secara logik di sini, tetapi Apabila #include, gunakan laluan fail .h kedua-dua laluan mutlak dan relatif boleh diterima.

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

#include 
#include "../../CATDLL/CATDLL/cat.h"
using namespace std;
#pragma comment(lib, "CATDLL.lib")
int main() {
cout << sum(1, 2) << endl;
return 0;
}
Salin selepas log masuk
  • h Fail pengepala: Mengandungi maklumat seperti struktur data, kelas, fungsi dan maklumat lain yang diisytiharkan dan dikeluarkan dalam dll.
  • fail perpustakaan lib: mengandungi nama dan lokasi projek yang dieksport oleh DLL Dalam fail boleh laku aplikasi yang memanggil dll, apa yang disimpan bukanlah kod fungsi yang dipanggil, tetapi projek yang akan dipanggil. dalam alamat memori DLL.
  • pustaka dinamik dll: mengandungi kandungan sebenar Semasa menerbitkan, hanya fail .exe dan fail .dll diperlukan, dalam direktori yang sama.

juga boleh dikonfigurasikan dalam Project-Properties-Linker-Input-Additional Dependencies:

Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++

boleh diabaikan: #pragma comment( lib, "CATDLL.lib")

Kaedah perpustakaan dinamik import C++ dua

#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;
}
Salin selepas log masuk

Python mengimport perpustakaan dinamik C++

Memandangkan C++ dll adalah 64-bit, Python juga memerlukan Penggunaan 64 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)
Salin selepas log masuk

Dengan cara ini, banyak fungsi yang biasa digunakan boleh dijadikan perpustakaan dinamik menggunakan C++, yang boleh dipanggil oleh bahasa lain seperti C++ atau Python.

Atas ialah kandungan terperinci Dua cara untuk C++ memanggil perpustakaan dinamik dan Python untuk memanggil perpustakaan dinamik C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan