visual studio dll 형식 프로젝트,콘 솔 프로그램 구축
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,콘 솔 프로그램)등 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#클래스 심층 접근 방법 다시 로드 및 객체 상호 작용겨울방학의 첫 번째 지식은 **구조 함수, 방법 재부팅, 대상 상호작용 **에 관한 블로그를 보실 수 있습니다. 클래스의 구조 함수는 클래스 중의 특수한 방법 특징이다. 2. 주의사항: 인삼이 있는 구조 함수를 호출...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.