visual studio dll 형식 프로젝트,콘 솔 프로그램 구축

1.vs 공정 유형 지식
vs 프로젝트 를 만 들 때'템 플 릿'에서'Win 32'를 선택 하면'Win 32 콘 솔 프로그램'이 든'Win 32 프로젝트'든 프로젝트 를 만 든 후'속성-C/C+-예비 프로세서 정의'에서 매크로 정의 가 있 습 니 다.'WIN 32'이기 때문에...코드 에서 매크로 정의'WIN 32'가 있 는 지 확인 하여 코드 에 대해 windows 와 Liux 의 통 제 를 잘 할 수 있 습 니 다.
win 32 프로젝트 를 만 들 때'Win 32 콘 솔 프로그램'을 선택 하 든'Win 32 프로젝트'를 선택 하 든'응용 프로그램 설정'마법사 로 이동 합 니 다.이 마법 사 는 사용자 가'응용 프로그램 형식'을 선택해 야 합 니 다.모두 네 가지 가 있 습 니 다.windows 응용 프로그램,콘 솔 프로그램,DLL(D),정적 라 이브 러 리(S)입 니 다.다만 처음에'Win 32 콘 솔 프로그램'을 선택 했다 면 여기 vs 는 이 마법사 에서'콘 솔 프로그램'으로 종 류 를 선 택 했 습 니 다.처음에'Win 32 프로젝트'를 선택 했다 면 여기 vs 는 이 마법사 에서'콘 솔 프로그램'으로 종 류 를 선 택 했 습 니 다.dll 인 터 페 이 스 를 봉인 하려 면'Dll(D)'을 선택 하 십시오.
vs 프로젝트 를 만 들 때 선택 한 응용 프로그램 형식 이"DLL(D)"일 경우 프로젝트 를 만 든 후"속성-C/C++-프로세서 정의"에서 매크로 정의"WIN 32","프로젝트 이름(대문자)EXPORTS”。
2.dll 타 입 프로젝트 만 들 기 지식
Dll 형식의 프로젝트 에서 dll 헤더 파일 의 매크로 정 의 는 다음 과 같 습 니 다.

1.//    ifdef        DLL        
2.//       。  DLL                  ONEDLL_EXPORTS 
3.//      。     DLL   
1.//               。  ,                    
// ONEDLL_API 함 수 는 DLL 에서 가 져 온 것 으로 간주 되 며,이 DLL 은 이 매크로 로 정 의 된/기 호 를 내 보 낸 것 으로 간주 합 니 다.\#ifdef ONEDLL_EXPORTS#define ONEDLL_API extern "C" __declspec(dllexport)#else#define ONEDLL_API extern "C" __declspec(dllimport)
#endif
__declspec(dllexport)는 함 수 를 DLL 출력 함수 로 표시 합 니 다.즉,다른 프로그램 에서 이 함 수 를 호출 할 수 있 습 니 다.

extern “C” __declspec(dllexport) int add(int a, int b);
그 중에서 extern"C"는 C 로 컴 파일 되 었 다.C++컴 파일 러 는 컴 파일 할 때 함수 이름 의 변 화 를 초래 하기 때문에 다른 프로그램 에서 함수 가 호출 되 지 않 고 C 컴 파일 러 는 컴 파일 한 후에 함수 이름 을 바 꾸 지 않 습 니 다.이렇게 하면 C 컴 파일 된 프로그램 으로 이 dll 의 함 수 를 호출 할 때 이 함 수 를 찾 지 못 할 수 있 습 니 다.

__declspec(dllexport) __declspec(dllimport)         
이렇게 DLL 코드 자체 가declspec(dllexport),DLL 을 사용 하 는 프로그램 에서declspec(dllimport),이 두 표 지 는 현재 함수 가 내 보 내 고 현재 함수 가 가 져 온 것 을 가리 키 는 데 사 용 됩 니 다.
인터페이스 함수 정의
1.ONEDLL_API int fnOneDll(void); 
3.dll 호출 방식
   DLL 호출 은 두 가지 방식 으로 나 뉜 다.동적 과 정적(동적 링크 와 암시 적 동적 링크 표시)
 (1)동적 호출(동적 링크 표시):

 typedef int(*lpAddFun)(int, int); //         
 lpAddFun add;//    
 HINSTANCE hDll=LoadLibrary(“path”);
 add=(lpAddFun)GetProcAddress(hDll, "add");//  dll  add    
 FreeLibrary(hDll);
dll 호출 에서 돌아 오 는 함수,포인터 또는 클래스 는 모두 포인터 방식 입 니 다.즉,함수,변수 또는 클래스 의 주 소 를 되 돌려 줍 니 다.함수 이름 으로 간단하게 값 을 부여 할 수 없 으 니 주의해 야 한다.
(2)정적 호출(암시 적 동적 링크):
 dll 을 호출 하 는 프로젝트 에 생 성 된.dll 과.lib 파일 을 복사 하고 명령 을 사용 합 니 다.

 #pragma comment(lib,"dllTest.lib"),      ,   dll          exe    ,               :
 #pragma comment(lib,"dllTest.lib")//.lib           DLL           
 extern "C" __declspec(dllimport) add(int x,int y);
 int main(int argc, char* argv[])
 {
  int result = add(2,3);
  printf("%d",result);
  return 0;
 }
   상기 코드 를 통 해 알 수 있 듯 이 정적 호출 방식 의 순 조로 운 진행 은 두 가지 동작 을 완성 해 야 한다.
   (1)컴 파일 러 와 DLL 에 대응 하 는.lib 파일 이 있 는 경로 와 파일 이름 을 알려 줍 니 다.\#pragma comment(lib,dllTest.lib)가 바로 이 역할 을 합 니 다.프로그래머 가 DLL 파일 을 만 들 때 커 넥 터 는 DLL 내 보 내기 함수 의 기호 이름과 번호(실제 코드 가 포함 되 어 있 지 않 음)를 자동 으로 생 성 합 니 다.응용 프로그램 에서.lib 파일 은 DLL 의 대체 파일 로 컴 파일 에 참여 합 니 다.또 다른 명시 적 호출 방식 은 vc 의 디 렉 터 리 와 includefiles 를 설정 하여 실현 하 는 것 이다.
   (2)설명 가 져 오기 함수,extern"C"declspec(dllimport)add(int x,int y)문장의declspec(dllimport)가 이 역할 을 발휘 합 니 다.정적 호출 방식 은 시스템 API 를 사용 하여 DLL 을 불 러 오고 마 운 트 해제 하 며 DLL 에서 내 보 낼 함수 의 주 소 를 가 져 올 필요 가 없습니다.프로그래머 가 정적 링크 를 통 해 프로그램 을 컴 파일 할 때,프로그램 에서 호출 되 는.lib 파일 에서 내 보 내기 기호 와 일치 하 는 함수 기호 가 생 성 된 EXE 파일 에 들 어가 고,.lib 파일 에 포 함 된 DLL 파일 의 파일 이름 도 컴 파 일 러 에 의 해 EXE 파일 내부 에 저장 되 기 때문이다.프로그램 이 실 행 될 때 DLL 파일 을 불 러 와 야 할 때 윈도 는 이러한 정보 에 따라 DLL 을 발견 하고 불 러 온 다음 기호 명 을 통 해 DLL 함수 에 대한 동적 링크 를 구현 합 니 다.이렇게 하면 EXE 는 함수 명 을 통 해 DLL 의 출력 함 수 를 직접 호출 할 수 있 습 니 다.프로그램 내부 의 다른 함수 와 같 습 니 다.
총결산
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 visual studio 구축 프로젝트(dll,콘 솔 프로그램)등 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기