2009-04-27 1 views
1

관리되지 않는 C++ dll은 int 형식을 창으로 사용하는 내 보낸 함수가 있습니다. hanlde관리되지 않는 C++ dll에 Windows 핸들 전달

void SetWindowHandle(int nHandle); 

else 관리되지 않는 dll 코드에서 intHWND으로 캐스팅되고 올바르게 사용됩니다.

그리고 Windows 양식 응용 프로그램에서 다음과 같이 핸들을 설정합니다.

여기서 _hHandle은 클래스 내부의 개인 멤버입니다. 나는 핸들을 올바르게 얻고 있는가? 그것은 그렇지만 응용 프로그램이 원하는 출력을 제공하지 않는 것 같습니다. 나는 그 문제가 그 손잡이에 있다고 생각한다.

추신 : 관리되지 않는 DLL에 대한 액세스 권한이 있으므로 제안 된 변경 사항을 수정할 수 있습니다.

답변

1

아무 문제가 없습니다. 당신은 .Net 선언 전체를 보여주지 않았습니다. 조심해야 할 것은 호출 규칙이 일치해야한다는 것입니다. DLL에 대한 일반적인 호출 규칙은 stdcall이지만 C++에서는 기본값이 아닙니다. 모든 Windows 헤더에서 보는 것처럼 보통 WINAPI 매크로를 사용하여 요청해야합니다.

통화의 양쪽에 액세스 할 수 있으므로 디버거을 사용하면 핸들이 올바르게 수신되는지 여부를 확인할 수 있습니다. 중단 점을 설정하고 변수의 값을 확인하거나 값을 디버그 콘솔 또는 파일에 인쇄하고 결과를 검사하십시오.

+0

Winforms 앱도 관리되는 C++이며 관리되지 않는 C++의 래퍼는 winforms 프로젝트와 함께 별도의 클래스 헤더/cpp로 포함됩니다. – rptony

+0

그래, 나는 dll 내부에서도 (잘 정수) 핸들을 얻는다; 그것이 올바른 핸들인지는 모르겠다. 글쎄, 그 핸들에 대해 GetDC를 호출 해 보겠습니다. 올바르게 반환되면 올바른 핸들입니다. – rptony

+0

값이 창 핸들인지 확인하려면 IsWindow를 호출하십시오. –