Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
WBOYke hadapan
2023-04-08 12:45:013454semak imbas

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);
# cat.cpp
#include "pch.h"
#include "cat.h"
extern "C" _declspec(dllexport) int sum(int a, int b) {
return a + b;
}

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;
}
  • 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;
}

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)

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam