자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi Delphi 10.1 Berlin AnyCpu 설정 방법
2017.04.10 12:25
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
안녕하세요.
Delphi 10.1 Berlin을 이용해서 64bit 어플리케이션(64bit OS, 64bit Application, VCL)을 개발중에 있습니다.
- Delphi ActiveX Control
- Visual Studio C++(MFC) Application
인터넷 검색 중 아래의 링크에서 Delphi 2007의 경우 PLATFORM을 AnyCPU로 구성이 가능하다는 글을 발견했는데,
http://support.embarcadero.com/jp/article/37522
Berlin에서도 AnyCPU 플랫폼 환경으로 빌드가 가능한지요?
가능하다면 어떻게 하는 것인지 알고 싶습니다.
참고로,
PC의 시스템 환경 변수 및 Delphi - Environment Variables에는 PLATFORM 변수가 정의되어 있지 않습니다.
미리 감사드립니다.
Delphi Delphi 10.1 Berlin AnyCpu 설정 방법
2017.04.10 12:25
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
안녕하세요.
Delphi 10.1 Berlin을 이용해서 64bit 어플리케이션(64bit OS, 64bit Application, VCL)을 개발중에 있습니다.
- Delphi ActiveX Control
- Visual Studio C++(MFC) Application
인터넷 검색 중 아래의 링크에서 Delphi 2007의 경우 PLATFORM을 AnyCPU로 구성이 가능하다는 글을 발견했는데,
http://support.embarcadero.com/jp/article/37522
Berlin에서도 AnyCPU 플랫폼 환경으로 빌드가 가능한지요?
가능하다면 어떻게 하는 것인지 알고 싶습니다.
참고로,
PC의 시스템 환경 변수 및 Delphi - Environment Variables에는 PLATFORM 변수가 정의되어 있지 않습니다.
미리 감사드립니다.
문제가 해결되어 자답을 작성합니다.
64bit MFC App에서 64bit Delphi로 작성된 ActiveX Control을 생성 시 memory access violation이 발생하여
해결책을 찾던 중 ActiveX가 AnyCPU로 빌드되어야 Visual Studio에서 로딩이 된다는 글을 보고 문의를 했던 것입니다.
몇일간의 삽질 끝에 문제의 원인을 찾았습니다.
결과적으로 64bit 빌드 시 Vcl.AxCtrls에 버그가 있는 것을 어렵게 발견하였고 수정하여 문제를 해결했습니다.
Vcl.AxCtrls.pas - OnAmbientPropertyChange function에서
TFont class를 Integer로 캐스팅한 코드를 NativeInt로 변경했습니다.
FWinControl.Perform(CM_PARENTFONTCHANGED, 1, Integer(Font));
->
FWinControl.Perform(CM_PARENTFONTCHANGED, 1, NativeInt(Font));
참고. 함수 코드
function TActiveXControl.OnAmbientPropertyChange(dispid: TDispID): HResult;
var
Font: TFont;
begin
if (FWinControl <> nil) and (FAmbientDispatch <> nil) then
begin
try
FWinControl.Perform(CM_PARENTCOLORCHANGED, 1, FAmbientDispatch.BackColor);
except
end;
FWinControl.Perform(CM_PARENTCTL3DCHANGED, 1, 1);
Font := TFont.Create;
try
Font.Color := FAmbientDispatch.ForeColor;
SetOleFont(Font, FAmbientDispatch.Font);
FWinControl.Perform(CM_PARENTFONTCHANGED, 1, Integer(Font));
except
end;
Font.Free;
end;
Result := S_OK; //OnAmbientPropChange MUST return S_OK in all cases.
end;
다른분께 도움이 될까하여 댓글을 남깁니다.