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
Freigeben: 2023-04-08 12:45:01
nach vorne
3550 Leute haben es durchsucht

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

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;
}
Nach dem Login kopieren
  • 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;
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage