|
현재..다국어(한국어, 중국어, 영어) 기능을 가지고 있습니다.
도움말을..디져서 씨빌더내의 Languages의 기능을 이용해서 다국어 기능을 처리했습니다.
그런데..문제는..윈도우 2000이상에서는 전혀 문제.없이 돌아 가는데. 윈도우 98에서는 Range Check Error
납니다.
프로그램 처음 시작시 리소스를 불러오는 중간에 발생하는 에러로 추정됩니다.
혹시 이런 경험.있으신..분이..계신가여? 도대체 이유를..알수가..없습니다.
아래의 소스는 C빌더 예제에 있는 소스중에서 ReInit.PAS를 그대로 링크 해서 사용하는데 표시한 부분에서
에러가 나더군여.
참고로..저는 C++Builder5.0 Ent버전으로 코딩중이면 윈도우는 2000Pro버전하에서 개발합니다.
function LoadNewResourceModule(Locale: LCID): LongInt;
var
FileName: array [0..260] of char;
P: PChar;
LocaleName: array[0..4] of Char;
NewInst: LongInt;
begin
GetModuleFileName(HInstance, FileName, SizeOf(FileName));
GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));
P := PChar(@FileName) + lstrlen(FileName);
while (P^ <> '.') and (P <> @FileName) do Dec(P);
NewInst := 0;
Result := 0;
if P <> @FileName then
begin
Inc(P);
if LocaleName[0] <> #0 then
begin
// Then look for a potential language/country translation
lstrcpy(P, LocaleName);
NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
/*----- 바로 요넘 LoadLibraryEx()만 호출하면 에러가 납니다 -----------------
if NewInst = 0 then
begin
// Finally look for a language only translation
LocaleName[2] := #0;
lstrcpy(P, LocaleName);
NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
end;
end;
end;
if NewInst <> 0 then
Result := SetResourceHInstance(NewInst)
end;
|