C# C++ DLL 파일 호출

2456 단어 C++
말하자면 부끄럽게도 등록한 지 1년이 넘었지만 공식적인 박문 한 편을 발표한 적이 없고 중간에 많은 학습 과정도 기록되지 않았다.지금은 새로운 환경에 이르렀고 공부할 기회도 생겼으니 매일의 수확을 반드시 기록해야 한다.
해야 할 일은 C++로 작성된 DLL을 인용해야 하는데, 처음에는 인터넷에서 보기만 해도 귀찮아 꼼꼼히 연구하지 못했는데, 지금은 다른 사람이 쓴 글을 보는 것도 어렵지 않다.다음을 참조하십시오.
1, 전체 DLL
C++를 사용하여 동적 라이브러리 항목을 만들고 프로그램 설정에서 "DLL"을 선택합니다.
CPPDemo 열기cpp 파일, 다음 코드 추가
  
#include "stdafx.h"
extern "C" __declspec(dllexport) int Add(int x, int y) { return x + y; } extern "C" __declspec(dllexport) int Sub(int x, int y) { return x - y; } extern "C" __declspec(dllexport) int Multiply(int x, int y) { return x * y; } extern "C" __declspec(dllexport) int Divide(int x, int y) { return x / y; }

  
이 안에서 extern "C"는 이중적인 의미를 포함하고 있으며, 글자에서 얻을 수 있다. 우선, 그 수식의 목표는 "extern"이다. (extern은 변수나 함수 앞에 두어 변수나 함수의 정의를 다른 파일에서 나타낼 수 있으며, 컴파일러가 이 변수와 함수를 만났을 때 다른 모듈에서 그 정의를 찾을 수 있음을 알린다.)그 다음으로 그것에 의해 수식된 목표는'C'이다.extern "C"로 장식된 변수와 함수는 C 언어로 컴파일되고 연결됩니다.
      __declspec (dllexport) 의 목적은 대응하는 함수를 DLL 동적 라이브러리에 넣기 위해서입니다.
      extern "C"__declspec(dllexport)을 합친 목적은 DllImport를 사용하여 C++가 아닌 DLL 파일을 호출하기 위해서입니다.DllImport를 사용하면 C 언어 함수로 만든 DLL만 호출할 수 있기 때문입니다.
프로젝트 컴파일, CPPDemo.dll
2、C#을 사용하여 이 DLL을 호출
C# 프로젝트를 만들고 CPPDLL 클래스를 새로 만듭니다. 클래스에 다음과 같은 코드를 추가하면 사용할 방법을 다시 설명하고 구체적인 실현 코드는 쓰지 않아도 됩니다.
 public class CPPDLL

    {

        [DllImport("CSharpInvokeCPP.CPPDemo.dll")]

        public static extern int Add(int x, int y);



        [DllImport("CSharpInvokeCPP.CPPDemo.dll")]

        public static extern int Sub(int x, int y);



        [DllImport("CSharpInvokeCPP.CPPDemo.dll")]

        public static extern int Multiply(int x, int y);



        [DllImport("CSharpInvokeCPP.CPPDemo.dll")]

        public static extern int Divide(int x, int y);



       

    }


주의 1은 DllImport을 사용해야 하며, "System.Runtime.Interop Services"를 인용해야 한다. 2, CPDemo에서 생성된 DLL 파일을 CSharpDemo의bin 디렉터리로 복사해야 한다.
이렇게 하면 프로젝트에서 DLL 방법을 사용할 수 있습니다.
 
int result = CPPDLL.Add(10, 20);


 
이것은 단지 정적 방법을 통해 C++ 안의 함수를 호출할 뿐, 나에게도 충분하다.잠시 이것들을 쓰면 견지하는 것이 승리다.안에 있는 코드는 다른 사람의 성과를 참고했기 때문에 작가를 찾지 못해서 말하기가 불편하다.인터넷상에서 모두가 공유해야만 진보할 수 있다고 말하고 싶을 뿐, 내가 쓴 것이 너를 도울 수 있다면 나는 매우 기쁘다.좋은 의견이 있으면 피드백을 환영합니다.
  

좋은 웹페이지 즐겨찾기