AW: Loading strings in a multilingual ca
IT347
Sunday, November 17, 1996
Tbanks for all the responses to this question but unfortunately no one =
has answered the question. I guess I didnt pose it correctly
Why when I switch to using resources from a dll and not from an exe cant =
=
I load the string table ALL the other resources load ok, ie menus and =
dialogs? This situation only occurs when the language setting of the os =
matches the language used in the resources compiled into the exe.
Please note as all the other resources load I must have some point have =
successfully done a AfxSetInstanceHandle. Also I have tried using the api =
=
loadstring resource with the instance handle of the dll.
Also telling the user to change the control panel settings doesnt work =
cause the requirement is to only change this programs language.
regards
----------
Von: Ian Pepper=5BSMTP:Ian=40flexicom.ie=5D
Gesendet: Donnerstag, 14. November 1996 10:45
An: 'mfc-l=40netcom.com'
Betreff: RE: Loading strings in a multilingual case
=5BMini-digest: 3 responses=5D
Hi,
You could put the Swiss German resources in a resouce only DLL. But,
your problem is probably due to not setting the resource handle via the
AfxSetResourceHandle/AfxGetResourceHandle in the DLL.
Hope this helps,
Ian
>----------
>From: cugr1=40gd.swissptt.ch=5BSMTP:cugr1=40gd.swissptt.ch=5D
>Sent: 12 November 1996 3:58 PM
>To: mfc-l=40netcom.com
>Subject: Loading strings in a multilingual case
>
>
> Environment: MSVC 4.0 / Win95
>further env info Win95 swiss German and win95 Swiss French
>
>Hi,
>I am having problems using LoadString both the CString and the api
>version.
>In my executable I have Swiss German resources but I also want to be
>able to give the user the ability to switch to Swiss French. I have
>created a resource dll containing the French resources and loaded
>this using Loadlibrary without any problems. If I run the program on
>a Swiss French win95 then everything is fine BUT and heres the
>problem if I run the program on a Swiss German version of win95 then
>although I can select the French dll and the menus and dialogs are
>french as expected LoadString doesnt work, it returns zero length. If
>I switch back to the german resources everything is hunky dory. I
>suspect the problem has something todo with the German resources
>being in the exe and not in a dll as well but I dont know why.
>If anyone can shed light on this I would be grateful otherwise I will
>probably hack out the German stuff into its own dll to see if this
>helps.
>
>
-----From: dima=40ssm6000.samsung.ru (Dulepov Dmitry)
You need to copy _all_ MFC resources from your EXE's RC to your dll=3D
s (do not forget standart components from AFXRES.RC - they are invi=3D
sible in AppStudio) and call AfxSetResourceHandle() in the beginnin=3D
g of InitInstance() to set the resource handle used by MFC to your =3D
DLL.
Dmitry A. Dulepov
Samsung Electronics Co., Ltd.
Russian Research Center
Phone: +7 (095) 213-9207
Fax: +7 (095) 213-9196
E-mail: dima=40src.samsung.ru
-----From: Dan Jerghiuta
I can't tell you what is wrong as long I don't how you implemented the =
dlls.
But this is not the usual way to handle multilingual strings.
In MSVC 4.0, you can create the same resource for different languages. =
So,
you have all your resources in the .EXE file and you don't need other =
dlls.
One of these lanuages is considered as default for your project (resource
compile option). Once you created all resources for your default =
language,
you can use Insert-copy command to create a copy of them for another =
language.
When you run the application, LoadString (both versions) will try to
identify the version of the resource that fits with the language set in =
the
Control Panel. If there is no such version, the default language version =
=
is
used.
So, to switch between the two languages the user has to change the =
control
pannel language setting. You shouldn't need other tricks unless your =
client
*really* wants to have all Windows applications in one language and your
application in another language.
BTW, when you create a resource in MSVC, it is implicitly for the =
language
currently selected in Control Pannel. Maybe this was a problem in your
situation (just guessing).
Dan Jerghiuta
danjer=40POBoxes.com
Dan Jerghiuta -- danjer@POBoxes.com
Wednesday, November 20, 1996
Sorry for not being helpful. If you really need to switch yourself the
resources, then forget about the usual way.
Simply create resource-only DLLs for each language and do not let any
resources in the EXE. Use LoadLibraryEx with LOAD_LIBRARY_AS_DATAFILE
to load the needed DLL and unload it before loading another one.
Declare the resources in each DLL as default language.
In NT (and I think it's also true in 95) all resources from the DLL
are maped in the EXE. Passing the handle of the DLL to a Load... function
does not help. That's why I recomend you to remove all the resources from
the EXE once you choose this approach.
BTW, maybe your problem has something to do with the fact that an application
may have multiple dialogs, menus etc, but only one string table.
Dan Jerghiuta
danjer@POboxes.com
At 12:33 PM 11/17/96 +0100, you wrote:
>
>Tbanks for all the responses to this question but unfortunately no one
has answered the question. I guess I didnt pose it correctly
>
>Why when I switch to using resources from a dll and not from an exe cant
I load the string table ALL the other resources load ok, ie menus and
dialogs? This situation only occurs when the language setting of the os
matches the language used in the resources compiled into the exe.
>
>Please note as all the other resources load I must have some point have
successfully done a AfxSetInstanceHandle. Also I have tried using the api
loadstring resource with the instance handle of the dll.
>Also telling the user to change the control panel settings doesnt work
cause the requirement is to only change this programs language.
>
>regards
>
| Вернуться в корень Архива
|