C #을 C를 호출하는 방법을 ++ (고급 장)

마지막으로, 문제는 기사에 의해 제기 : 여러 가지가 다있는 경우 ++ 라이브러리 선언이 필요? ? 이 코드를 많이 쓸 수 있나요? ? 그리고 더 지능이 그 혜택을 볼 수없는 제안이있다.

도는 다음과 같습니다 :

 

 이 방법으로 호출에 친구가 필요하지만, 사용하는 방법을 모르는 경우, 내 이전 문서를 참조하십시오 :

필요 참조의 친구 요약 기록의 과정에서 이러한 문제에 대한 응답합니다.

키 : C #을 C ++ 호출하여 달성 CLI

기사를 읽은 후, 나는 당신이 것으로 판단하고 단계 작업에 의해 단계를 원한다.

첫째, 새로운 netcore 콘솔 응용 프로그램을 만들;

이것은 우리가 C를 호출하는 데 사용 테스트입니다 ++

 

 

둘째, C ++ 빈 프로젝트를 생성

도표 :

 

 이 프로젝트는, 우리는, 클래스를 추가 여기에 몇 가지 방법을 쓰기 생성되는 계산기를 작성하는 간단한 산술입니다!

다음 코드, 여러 함수 선언의 정의를 추가 CaculateData.h;

 

#INCLUDE <STDIO.H> 
#INCLUDE <stdlib.h> 
#INCLUDE <iostream> 

#ifdef와 CaculateDLL_EXPORTS 
#DEFINE Calculate_EXPORTS __declspec (dllexport)
 #else 
#DEFINE Calculate_EXPORTS __declspec (같이 DllImport)
 #endif 다음 

통근  " C " Calculate_EXPORTS을 int로 추가 ( INT numberA , INT의 numberB); 

통근  " C " Calculate_EXPORTS을 int로 (빼기 INT numberA, INT numberB); 

통근자  " C " Calculate_EXPORTSINT 곱셈 ( INT numberA, INT numberB); 

통근  " C " Calculate_EXPORTS가   되는 int (분할 INT numberA, INT numberB); 

클래스 CaculateData 
{ 
공개 : 
    CaculateData (); 
    ~ CaculateData (); 

};

 

우리는 매크로 IFDEF #이 정의되지 않은 볼 수 있습니다, 그래서 우리는 매크로를 추가해야합니다 :

프로젝트 를 마우스 오른쪽 속성 - - 구성 속성 --- C / C ++ --- --- 처리기 처리기 정의는 매크로 정의가 추가됩니다;

 

당신은 매크로를 선언했다고 설명, 색상이 보라색이된다, 잘 정의 된, 볼 수 있습니다;

CaculateData.cpp 이것을 달성하는 여러 가지 방법;

사용법 #include " CaculateData.h " 
사용법 #include <iostream> 

CaculateData :: CaculateData () 
{ 
} 


CaculateData :: ~ CaculateData () 
{ 
} 

Calculate_EXPORTS이 int로 추가 ( INT numberA, INT numberB) 
{ 
    반환 numberA + numberB을; 
} 

Calculate_EXPORTS는 int 형 빼기 ( INT numberA, INT numberB) 
{ 
    반환 numberA을 - numberB 단계; 
} 

Calculate_EXPORTS는 int로 곱셈을 (INT numberA, INT numberB) 
{ 
    반환 numberA * numberB을; 
} 

Calculate_EXPORTS가 되는 int (분할 INT numberA, INT numberB) 
{ 
    경우 (numberB == 0 ) { 
        표준 : COUT << " 除数不能为空" << 표준 : ENDL 단계; 
    } 
    반환 numberA / numberB을; 
}

 

C ++ 프로젝트 출력 디렉토리를 수정, 여기에 CLI 참조를 용이하게하기 위해 주로, 우리가 출력 디렉토리 Testinvoking 프로젝트를 정의하는 데 동의합니다 .. \ 디버그 \ netcoreapp2.2 \ 빈

(수정 단계 : 오른쪽 프로젝트 - 속성 - 구성 속성 - 일반 - 출력 디렉토리)

다음과 같이 구성 유형 개정 : 동적 라이브러리는 .DLL

(단계 수정 : 오른쪽 프로젝트 - 속성 - 구성 속성 - 일반 - 형 구성)

 이어서 생성;

결과는 다음과 같다 : 당신은 로그가 인쇄되고, 볼 우리가 성공을 생성하도록 할 수 있습니다.

 

 해당 디렉토리는 확인도 볼 만합니다

 

셋째, 새로운 CLR 프로젝트를 생성

이 프로젝트는 C ++ C #을 호출 구현 될 것입니다

Caculate.dll를 호출 할 필요성 때문에, 우리는 그것을 참조 할 필요가;

구성 속성 -VC ++ 디렉토리 - 라이브러리 카탈로그 (단지 경로 Caculate.dll로 생성 된 추가 된)

 

 한편 참조 라이브러리 :

 

 클래스 InvokeCon.cpp 추가 Caculate.dll의 메소드를 호출하는 데 사용할

 다음과 같이 InvokeCon.cpp 코드는 다음과 같습니다

사용법 #include " InvokeCon.h " 

InvokeCon :: InvokeCon () 
{ 
} 

INT InvokeCon :: AddCli ( INT numberA, INT numberB) 
{ 
    반환 (numberA, numberB)를 추가; 
} 

INT InvokeCon :: SubtractCli ( INT numberA, INT numberB) 
{ 
    반환 빼기 (numberA, numberB); 
} 

INT InvokeCon :: MultiplicationCli ( INT numberA, INT numberB) 
{ 
    반환 곱셈 (numberA, numberB을); 
} 

INT의 InvokeCon :: DividedCli (INT numberA, INT numberB) 
{ 
    반환 ) 분할 (numberA, numberB; 
}

InvokeCon.h 코드 :

의 #pragma

사용법 #include <iostream> 
사용법 #include " C : \ 사용자 \ tjy \ 소스 \에의 repos \ TestInvoking \ Caculate \ CaculateData.h "//引用库声明对应文件路径
공공  심판  클래스 InvokeCon 
{ 
공개 : 
    InvokeCon (); 

    INT AddCli ( INT numberA, INT numberB);
    INT SubtractCli ( INT numberA, INT numberB);
    INT MultiplicationCli ( INT numberA, INT numberB);
    INT DividedCli ( INT numberA, INTnumberB); 
};

 

그런 다음, 컴파일 컴파일 시간 형 동적 라이브러리 DLL을 수정

 

 그런 다음 생성 :이 시점이 CliDll.dll 라이브러리를 발생에서

 

넷, C #을 방법은 참조를 통해 호출 Caculate CliDll.dll

1 DLL에 대한 참조를 추가;

2, C # 프로젝트에 테스트 코드를 추가합니다 :

그런 다음 다양한 방법을 호출 할 수 있습니다 것을 볼 수 있지만, 메소드 이름은 메시지를 표시합니다!

사용하여 시스템; 

네임 스페이스 TestInvoking 
{ 
    공공  클래스 프로그램 
    { 
        공공  정적  무효 메인 ( 문자열 []에 args) 
        { 
            은 try 
            { 
                Console.WriteLine ( " CLI에 의해 --------- C #을 C ++ 클래스 메소드 호출 ------ --- " ); 
                Console.Write는 ( " numberA를 입력하십시오 : " );
                 INT numberA = Convert.ToInt32 (Console.ReadLine ()); 
                Console.Write ( " numberB를 입력하십시오 : " );
                 INTnumberB = Convert.ToInt32 (Console.ReadLine ()); 

                호출 InvokeCon = ) (InvokeCon 단계;
                INT addResult = invoke.AddCli (numberA, numberB);
                INT subResult = invoke.SubtractCli (numberA, numberB);
                INT mutilResult = invoke.MultiplicationCli (numberA, numberB);
                INT divResult = invoke.DividedCli (numberA, numberB); 

                Console.WriteLine ($ " 은 {numberA}과 {numberB}의 합은 다음과 같습니다 {addResult}; 서브는 다음과 같습니다 {subResult}; Mutil은 다음과 같습니다 {mutilResult}; 사업부는 다음과 같습니다 {divResult} " ); 
            }
            캐치 (예외 예) 
            { 
                Console.WriteLine ($ " 예 : {예} " ); 
            } 

            Console.WriteLine ( " 执行成功" ); 
            Console.ReadLine (); 
        } 
    } 
}

 확인 완료!

코드는 GitHub의에 넣어왔다,이 문서는 간단한 데모입니다, 친구들이 볼 수있는 필요

GitHub의 주소 : https://github.com/tomorrowGooddays/Invoke

설명 : 작업 중 의문 사항이 잘못 쉽게 코멘트를 토론하지, 수정에 오신 것을 환영합니다! 원본 기사, 복제, 소스를 표시하시기 바랍니다, 감사합니다!

추천

출처www.cnblogs.com/skyfreedom/p/11783629.html