|
: 다시올려서 미안합니다....기술란이 자료만으로 해결이 안돼서...
:
:
: DLL을 사용하는 프로그램 내에서 DLL내의 함수 호출은 잘 되거든요....
: 기술란에 이과정 설명이 잘소개되어 있는덕분에요...
: 저의 문제는 반대로...DLL 내에에서 프로그램의 함수를 호출하는 경우거든요....
:
: 프로그램이 DLL내의 함수를 호출 하면서 프로그램 내의 함수에 대한 포인터를 파라미터로 넘겨주고
: DLL은 이함수 포인터를 가지고 프로그램 내의 함수를 호출합니다.
: 이때 에라가 나면서 프로그램이 종료하더군요...
:
: 프로그램에서 파라미터로 넘겨줄 함수 선언을
:
: void pop_handler(Pop_Info *pop_ptr)...단순히 이렇게....했거든요...이게 문젠가요?
:
: 그리고 다음과 같이 호출하면서 pop_handler를 넘겨줍니다.
: PopPoll(IP[0], // IP
: "public", // Community String
: 5, // get period
: 1, // Timeout
: 1, // MIB number
: 10, // Retry number
: mib, // Char **
: POPUP_ONE,
: pop_handler, //handler
: pop_timeout_handler, //timeout handler
: "stack name");
:
: 물론 PopPoll 이란 함수는 DLL 내에 있는함수죠....
: 이렇게 하면 ...DLL 쪽에서 pop_handler 를 호출하도록 되어있지요....
: 그런데 DLL 쪽에서 DLL 쪽에서 pop_handler 를 호출하면서 에러가 발생 하더군요...
: Visual C++로 할땐 잘되던건데요....
:
: 제 설명이 좀 부족한가요....
:
: 이해가 되셨다면...도움을...
:
:
임펠리테리입니다.
좀 특이한 시도를 하시는군요.
메인 프로세스에서 호출된 DLL에서 함수의 포인터를 넘겨줘서 메인의 함수를 실행시킨다...
물론 그런 방법이 필요할 경우가 있을 거란 점에 대해서는 이해가 됩니다.
하지만 제가 아는 한에서는 그러한 테크닉에 대해선 어떤 기술문서에서도 설명된 적이 없었습니다.
DLL은 물론 호출한 프로그램의 메모리공간 내에 매핑되므로 이론적으로 볼 때 그런 방법이
충분히 가능합니다. 더욱이 비주얼C++ 에서는 잘 되었다고 하셨으니 C++Builder에서도 가능하겠죠.
하지만 보여주신 소스 부분만으로는 무엇이 문제인지 짐작이 되지 않는군요. 에러가 발생한다고
말씀하셨는데 그것이 런타임에러인지 혹은 컴파일타임에러인지도 알려주시지 않으셨구요.
어떤 에러인지, 그리고 메시지는 어떻게 나오는지 등을 다시 알려주시면 다시 검토해보겠습니다.
그럼 이만...
|