VC 6.0 동적 링크 라 이브 러 리 를 어떻게 만 들 고 호출 하 는 지 상세 하 게 설명 합 니 다.

동생 의 회사 직책 은 지난 블 로그 에서 간략하게 소개 되 었 다.이 블 로 그 는 주로 기술 의 응용 을 소개 하 는데 원 리 를 자세히 따 지지 않 는 다.회사 프로젝트 가 급 하고 결과 가 중요 하 며 우리 도 연구 에 전념 하 는 것 이 아니 기 때문에 원 리 를 기본적으로 알 게 된 후에 직접 일 을 해서 demo 를 만 드 는 것 이 가장 좋다.회사 의 업무 상황 에 대해 서 는 오늘 잠시 생략 하 겠 습 니 다.물론 한두 마디 로 분명하게 표현 할 수 있 는 것 도 아 닙 니 다.그 다음 에 해당 하 는 업무 정리 가 있 을 것 입 니 다.기대 하 세 요..................................................................고객 과 백 스테이지 의 중개 로 서 두 측의 관 계 를 잘 조절 하기 위해 저 는 웹 서비스 와 동적 링크 라 이브 러 리 를 현명 하 게 선 택 했 습 니 다.클 라 이언 트 c++와 동적 연결 라 이브 러 리 방식 을 사용 하고 배경 자바 와 웹 서 비 스 를 사용 하여 의사 소통 을 합 니 다.동적 링크 라 이브 러 리 가 생 겼 으 니 정적 링크 라 이브 러 리 를 생각 하 실 겁 니 다.허허,이 건 상대 적 인 거 야.그럼 이 두 가 지 는 어떤 차이 가 있 습 니까?그런데 왜 동적 링크 라 이브 러 리 를 선 택 했 을까요?정적 링크 라 이브 러 리:lib 파일 도 exe 파일 에 압축 했 습 니 다.동적 링크 라 이브 러 리:lib 파일 을 exe 파일 에 포장 하지 않 았 습 니 다.사용 하면 해당 dll 파일 을 직접 불 러 옵 니 다.또한 정적 링크 라 이브 러 리 에는 정적 링크 라 이브 러 리 와 동적 링크 라 이브 러 리 가 포함 되 어 있 지 않 으 며,동적 링크 라 이브 러 리 에는 정적 링크 라 이브 러 리 와 동적 링크 라 이브 러 리 가 포함 되 어 있 습 니 다.동생 이 봉 인 된 dll 에는 고객 을 호출 하 는 dll 이 있 고 다른 동적 링크 라 이브 러 리 가 포 함 될 수 있 기 때 문 입 니 다.이에 따라 동생 은 동적 링크 라 이브 러 리 를 선택 했다.또 하 나 는 동적 링크 라 이브 러 리 도 세 가지 상황 으로 나 뉜 다.하 나 는 MFC 가 아 닌 dll(즉 콘 솔 의 dll)이 고,다른 하 나 는 일반적인 MFC 의 dll(그 중에서 정적 인 dl 과 공 유 된 dll)이 며,다른 하 나 는 확 장 된 MFC 의 dll 이다.또한 MFC 의 dll 은 MFC 프로그램 이나 콘 솔 프로그램 에 의 해 호출 될 수 있다.동생 이 봉 인 된 dll 은 MFC 프로그램 호출 이 필요 하기 때문에 MFC 일반적인 dll 을 사용 했다.콘 솔 프로그램 을 사용 하여 테스트 를 합 니 다.우선,새 프로젝트 에서 MFC AppWizard(dll)를 선택 한 다음 머리.h 파일 에서 외부 에서 호출 된 함수
 
extern "C" _declspec(dllexport) char* queryFunctionByFID(char* funcId);
를 설명 한 후 cpp 파일 에서 이 함 수 를 구현 합 니 다.
 
char* queryFunctionByFID(char* funcId)
{
…………………………
}
컴 파일,build 생 성.OK,Debug 에서 해당 하 는 dll 을 생 성하 여 동적 링크 라 이브 러 리 가 생 성 되 었 습 니 다.그리고 프로그램 은 이 dll 파일 을 직접 사용 할 수 있 습 니 다.그래서?dll 파일 copy 를 해당 테스트 dll 프로그램(dll 프로그램 호출)에 보 냅 니 다.사용 방식 은 다음 과 같다.나 는 dll 프로그램 에서 사용 하 는 콘 솔 프로그램 을 테스트 하 는데 이렇게 간단 하고 편리 하 며 당연히 MFC 프로그램 을 사용 해도 된다.예 를 들 어 우 리 는 콘 솔 프로그램 을 새로 만 든 다음 에 main 방법 에서 다음 과 같이 쓴다.
 
// ,
typedef char* (* queryFunctionByFID)(char*);
// , DLL
HINSTANCE hDLL=NULL;
// ,dll dll 。
hDLL=LoadLibrary("IProcessInstIn.dll");
queryFunctionByFID saveProcess=NULL;
//
saveProcess=(queryFunctionByFID)GetProcAddress(hDLL,"queryFunctionByFID");
//
cout<<" :"<<saveProcess("dd");
//
FreeLibrary(hDLL);
모든 문장의 역할,주석 은 이미 명확 하 게 표현 되 었 다.모 르 는 게 있 으 면 연락 하고 서로 교류 해 보 세 요.사실 동적 링크 라 이브 러 리 는 우리 VS 의 dll 과 유사 합 니 다.다만,그 때 는 dll 을 해당 하 는 프로그램 에 인용 한 다음 에 바로 사용 할 수 있 습 니 다.이 곳 은 우리 가 수 동 으로 불 러 오고 연결 하 며 dll 을 방출 합 니 다.이러한 방식 의 동적 링크 라 이브 러 리 를 사용 하면 우 리 는 프로그램 에서 원 하 는 함 수 를 마음대로 사용 할 수 있 습 니 다.우리 가'로드,로드 라 이브 러 리―GetProcAddress―FreeLibrary'원칙 을 지 키 기만 하면 된다.사용 이 상당히 편리 하 다.둘 사이 의 결합 에 대한 어려움 에서 벗 어 날 수 있 고 로드 와 방출 이 편리 합 니 다.정적 링크 라 이브 러 리 를 호출 하 는 방법 은 다음 과 같 습 니 다.첫째,lib 파일 과 dll 파일 두 파일 을 모두 클 라 이언 트 아래 에 두 고 동적 링크 라 이브 러 리 를 호출 할 때 dll 파일 만 필요 합 니 다.둘째:클 라 이언 트 에 새 헤더 파일 이 필요 합 니 다.dll 내 보 내기 함수 와 같은 헤더 파일 입 니 다.셋째,클 라 이언 트 호출 dll 파일(cpp 파일)에 사전 명령 을 추가 합 니 다.즉,lib 파일 을 명시 적 으로 불 러 옵 니 다.예 를 들 어\#pragma comment(lib,"IProcessInstin.dll")네 번 째:button 이벤트 에서 해당 하 는 방법 을 직접 호출 합 니 다.예 를 들 어 cout<<<"결 과 는:"

좋은 웹페이지 즐겨찾기