|
Thanks - but im trying to avoid that - also because its going to be always run from a CD, and its a rather large resource, i would like to just execute it from ram if thats poss.
|
|
|
|
|
I need to support about 18 languages in my application. It must run on 98, NT, and above. The powers that be will not allow me to use multiple build targets/configurations, or have several language dlls lying around. It must detect the regional language setting at startup, then load the correct resources. In other words, one build is shipped for 18 languages.
Ok, so far, I know that I can house multi-language resources in a single external dll, even my own executable. I know how to detect the current user's regional language settings using GetUserDefaultLCID(). I discovered that others have used SetThreadLocale() to switch what language resources get used, but then I looked it up in MSDN and read that one should not use this function, and instead should use FindResourceEx().
So, given that I cannot have multiple build targets, cannot have multiple language dlls lying around, and cannot use SetThreadLocale(), it seems I'm left with one option: FindResourceEx(). I must dynamically load every string, dialog, control, bitmap, etc. at startup. For about 34 dialogs, in 18 languages... 612 dialogs. With roughly 4 string resources or other controls on each. 2448 individual items. No, I can't just localize the strings. The dialogs may change size from language to language, as can the controls.
Please, please, please tell me there is another method than FindResourceEx()!
I've dabbled with the idea of having each resource duplicated for each language, but with a resource id offsetted a fixed amount. In other words, after detecting the language, I can calculate the resource id offset, then construct my pages with something like myPropPage.Construct(IDD_DIALOG1+offset). Though I'm not sure if this would be any easier.
Also, I'm concerned about displaying asian character sets. Will I have to manually change the code page somehow before loading resources?
Any words of advice would be greatly appreciated!
|
|
|
|
|
"we would like u to build an app but u cant use a compiler:
sounds like a nightmare ... shame
i would start considering a custom solution like having a binary data file that contained meta-resource description from which u could generate all the rubbish u needed at runtime ... hell of a bad way to go tho cos ud have to make ur own editor for the thing etc etc
"there is no spoon" biz stuff about me
|
|
|
|
|
Hey everyone,
I was wondering if someone can point me in a direction to help me learn how to use DevStudio. Does anyone know of a good place that maybe able to help me??
|
|
|
|
|
i assume u mean visual studio version blah?
not trying to be funny but in the product itself are many tutorials on the environment
make sure u understand the language ur wanting to use first
it will help
"there is no spoon" biz stuff about me
|
|
|
|
|
lol. Its ok I am not talking about Visual Studio. DevStudio is used to help you set up installs of the software you write. Install shield if that rings a bell?
http://www.installshield.com/products/devstudio/
Thanks everyone!
|
|
|
|
|
heh sorry bout that
i use nsis for installations so sorry cant help u
"there is no spoon" biz stuff about me
|
|
|
|
|
is nsis easy to use and open source?
|
|
|
|
|
|
I am trying to change printer settings (orientation) on 2000 and xp for an HP printer. I am able to change the orientation using PrintDlg () but the width and heigth do not change as they should when I call GetDeviceCaps (). This works on NT, but not 2000 or XP.
Has anyone seen this before or have any suggestions?
David
|
|
|
|
|
I have a set of C++ static libraries that is released as part of my product, and used by other developers to build their applications. Someone using these libraries is gettings an error linking in debug mode (missing debugging information for referencing module) which only occurs when the separate types linker option is turned off - when it is on the program links successfully.
Does anyone know how to resolve this so that linking can still be done successfully in debug mode without having to use separate types? Do I need to distribute the .pdb files along with the static libraries or something like that?
Dave
http://www.cloudsofheaven.org
|
|
|
|
|
I'm not entirely sure, but I think your problem lies in the fact that you need to produce separate static libraries built to link to the various types of run-time libraries (static and dynamic).
You need to produce a library with different warts for each of the different linker options (/MD /MDd /ML /MLd ) and Unicode options if applicable.. This makes about 8 libraries you need to compile for completeness.
It's a real pain... however you can make it so the users of the libraries are not too inconvenienced by using the #pragma comment(lib, libraryName) compiler directive.
Good luck.
//.ichael
|
|
|
|
|
If I have, say:
typedef enum<br />
{<br />
val1 = 0,<br />
val2 = 1,<br />
val3 = 5<br />
} MyEnum;
Is there any programatic way I can find out how many constants MyEnum contains, what their highest and lowest values are, etc?
I assume not, but I live in hope
|
|
|
|
|
I don't think there is.
Afterall, what you are doing is defining a new enumeration type, which grants a value to certain types of selections. So a MyEnum type can only contain three possible values.
But as you require the definition of the enumeration type in order to use it anyhow, then how come you can't check the definition itself which of the values is the highest or lowest ?
Naturally, you could check the size of the enumeration structure, but I believe it would return a value of no significant meaning. I have never tested.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Antti Keskinen wrote:
Naturally, you could check the size of the enumeration structure, but I believe it would return a value of no significant meaning. I have never tested.
It'll be sizeof(int) or sizeof(short) (I *think* it's supposed to be sizeof(int), but I'm not 100%, and I know some compilers allow one to make enums 16 bit)
--
I am perpetual, I keep the country clean.
|
|
|
|
|
You want C#, it adds exactly these things to the language, and more ( i.e. more for enums ). But in C++, the answer is, no. The best you can do is end each enum with an element called ItemCount, or something. It will then hold the number you want, as the list is 0 based.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
No, the standard way of doing this is something like
enum MyEnum
{
meVal1 = 0,
meVal2 = 1,
meVal3 = 5,
me__MinVal = 0,
me__MaxVal = 5,
me__Count = 3
};
Otherwise, enums are just slightly typed constants. They aren't a particularly solid type (like in pascal), but is does have its advantages.
//.
|
|
|
|
|
The way I've always done this is:
enum MyEnum {
val1 = 0,
val2 = 1,
val3 = 5
MyEnum_min = val1,
MyEnum_max = val3,
MyEnum_cnt = 3
};
Software Zen: delete this;
|
|
|
|
|
In an effort to use a specific printer I am using OpenPrinter with the printer name. When this call is made using most of the printers I have access to it works fine. However, if the named printer happens to be an HP printer, OpenPrinter() returns 1801 (INVALID_PRINTER_NAME). The name is the correct name from the installed printers on the system.
Does anyone have any idea what's going wrong?
|
|
|
|
|
What OS?
For NT, XP and 2000 it seems to want the PRINTER_DEFAULTS.DesiredAccess to be set to READ_CONTROL || PRINTER_ACCESS_USE
'--8<------------------------
Ex Datis:
Duncan Jones
Merrion Computing Ltd
|
|
|
|
|
I'm using XP. I'll give this a try. Thanks.
|
|
|
|
|
the DesiredAccess flag made no difference. I still got an 1801 error back from 'GetLastError()' after OpenPrinter failed. This only happens with HP printers. All others seem to work fine.
|
|
|
|
|
How can I merge the string table of 2 resource file automatically. For example I have a main resource(main.rc)with default string table entries and a second resource(temp.rc)with extra string table entries. I added the #include "temp.rc" into the main.rc. but it doesn't add it. Any ideas?
Thanks
|
|
|
|
|
Open the two .rc file in one vc ide, select the strings that you want to append and then drag n drop in the target table.
this will do the trick.
hope it helps.
I Touched Osama Bin Ladens Bushy Beard
|
|
|
|
|
Anthony9887 wrote:
I added the #include "temp.rc" into the main.rc. but it doesn't add it.
Do you get a compiler error? This is normally not an issue as there is already a #include for a .rc2 file that AppWizard creates for you. It shouldn't be any different than that.
A rich person is not the one who has the most, but the one that needs the least.
|
|
|
|