Heim >Backend-Entwicklung >Python-Tutorial >Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

WBOY
WBOYnach vorne
2023-04-08 12:45:013548Durchsuche

Erstellen Sie eine dynamische Bibliothek

Eine dynamische Bibliothek ist eine Bibliotheksdatei, die geladen wird, wenn das Programm ausgeführt wird, und nicht die Größe des Programms selbst einnimmt.

Wählen Sie das dynamische Bibliotheksprojekt aus:

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

Erstellen Sie neue .h- und .cpp-Dateien:

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

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

Wählen Sie die Release-Version für die dynamische Bibliotheksfreigabe.

Dynamische Bibliothek in C++ importieren Methode 1

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

Erstellen Sie ein neues leeres C++-Projekt, kopieren Sie die .lib- und .dll-Dateien im dynamischen Bibliotheksprojekt in das aktuelle Projekt:

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

Fügen Sie im C++-Projekt die hinzu dynamische Bibliothek Die Header-Datei muss nicht in das aktuelle Projekt kopiert werden. Fügen Sie einfach das vorhandene Element hinzu. Es muss hier nur logisch eingeführt werden, aber der Pfad zur .h-Datei muss verwendet werden, wenn #include, sowohl absolut als auch relativ Wege sind akzeptabel.

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

#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-Datei: Enthält Informationen wie Datenstrukturen, Klassen, Funktionen und andere Informationen, die in der DLL deklariert und ausgegeben werden.
  • lib-Bibliotheksdatei: Enthält den Namen und den Speicherort des von der DLL exportierten Projekts. In der ausführbaren Datei der Anwendung, die die DLL aufruft, wird nicht der aufgerufene Funktionscode, sondern die Speicheradresse des aufzurufenden Projekts gespeichert in der DLL.
  • Dynamische DLL-Bibliothek: enthält den eigentlichen Inhalt. Bei der Veröffentlichung sind nur die .exe-Datei und die .dll-Datei im selben Verzeichnis erforderlich.

kann auch in Project-Properties-Linker-Input-Additional Dependencies konfiguriert werden:

Zwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen

kann weggelassen werden: #pragma comment(lib, "CATDLL.lib")

C++-Import dynamischer Bibliotheksmethode zwei

#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 importiert die dynamische C++-Bibliothek

Da die C++-DLL 64-Bit ist, muss Python auch 64-Bit verwenden.

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)

Auf diese Weise können viele häufig verwendete Funktionen mit C++ in dynamische Bibliotheken umgewandelt und von anderen Sprachen wie C++ oder Python aufgerufen werden.

Das obige ist der detaillierte Inhalt vonZwei Möglichkeiten für C++, dynamische Bibliotheken aufzurufen, und Python, um dynamische C++-Bibliotheken aufzurufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen