파이썬에서 DLL 사용

소개



거기에서 Python에서 C++로 만든 DLL을 읽고 싶기 때문에 알아야 할 필요가 나왔습니다.
나 자신 Python도 C++도 만만치 정도밖에 모르기 때문에, 조금 빠졌습니다.
여러가지 기사가 이미 세상에 존재하고 있습니다만, 자신을 위해서 써 남기고 싶습니다.

먼저 DLL 준비



VS2017 사용 중입니다.
동적 링크 라이브러리 프로젝트를 만듭니다. 이름은 무엇이든 좋다고 생각합니다.
이번에는 DLLTest라는 이름으로 만들고 있습니다.


DLL 프로그램을 만들어갑니다



DLLTest.h
#pragma once

#ifdef DLLTEST_EXPORTS
#define DLLTEST_API extern "C" __declspec(dllexport)
#else
#define DLLTEST_API extern "C" __declspec(dllimport)
#endif // DLLTEST_EXPORTS

DLLTEST_API int GetData(int, int);
extern "C" __declspec(dllexport) 에서 함수 내보내기 선언합니다.

DLLTest.cpp
// DLLTest.cpp : DLL アプリケーション用にエクスポートされる関数を定義します。
//

#include "stdafx.h"
#include "DLLTest.h"

int GetData(int a, int b)
{
    return a + b;
}

실행할 함수를 만들어갑니다.

stdafx.h
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、
// または、参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
//

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Windows ヘッダーからほとんど使用されていない部分を除外する
// Windows ヘッダー ファイル
#include <windows.h>
#include <string>


// プログラムに必要な追加ヘッダーをここで参照してください
#include "DLLTest.h"

네, 그 이상입니다. 빠져 나오는 부분은 나중에 설명합니다. 먼저 성공 패턴으로.
Debug 빌드를 수행하여 DLL을 만듭니다. DLL은 프로젝트의 Debug 폴더 안에 있습니다.

다음으로 파이썬 측에서 호출



PC에는 Python 3.7과 2.7이 설치되어 있지만 3.7을 이번에 사용하고 있습니다.
VS2017에서 만든 DLL을 파이썬 소스 위치에 복사합니다.
그런 다음 LoadLibrary에 DLL 이름을 설정합니다.

test.py
# coding: utf-8

from ctypes import *

dll = cdll.LoadLibrary("DLLTest.dll")

print(dll.GetData(100, 101))

이제 파이썬을 실행하면. DLL로 결과를 얻을 수있었습니다.
> py test.py
201

빠진 곳



"OSError: [WinError 193] %1이(가) 유효한 Win32 응용 프로그램이 아닙니다."라고 나왔습니다.



해결
DLL 빌드가 x64 아니었다. 파이썬을 64비트로 설치했기 때문입니다. 알아차리는 데 약간의 시간이 걸렸습니다. .


「AttributeError: function 'GetData' not found」라고 나왔다.



해결
extern "C"가 빠졌습니다.

DLLTest.h
#define DLLTEST_API extern "C" __declspec(dllexport)

여러가지 공부가 되었습니다.

좋은 웹페이지 즐겨찾기