마지막으로, 문제는 기사에 의해 제기 : 여러 가지가 다있는 경우 ++ 라이브러리 선언이 필요? ? 이 코드를 많이 쓸 수 있나요? ? 그리고 더 지능이 그 혜택을 볼 수없는 제안이있다.
도는 다음과 같습니다 :
이 방법으로 호출에 친구가 필요하지만, 사용하는 방법을 모르는 경우, 내 이전 문서를 참조하십시오 :
필요 참조의 친구 요약 기록의 과정에서 이러한 문제에 대한 응답합니다.
키 : 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
설명 : 작업 중 의문 사항이 잘못 쉽게 코멘트를 토론하지, 수정에 오신 것을 환영합니다! 원본 기사, 복제, 소스를 표시하시기 바랍니다, 감사합니다!