473,386 Members | 1,820 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

string constants / conversion from const char * to String

I want to declare an array of constant strings. In unmanaged C++ I'd
do this

static const char *string[] = { "One", "Two, "Three" };

However if I do this in .NET and want to pass these to a function
which takes an Object * then I get compilation errors. The only way to
avoid these seems to be to create a temporary string on the heap,
e.g.

String *str = new String(string[1]);
function(str);

Which seems a bit wasteful.

If I try to declare my static const array as Strings instead then I
get warnings about not being able to declare managed types as statics.

What is the right way to do this? Is there a better way to declare the
array of constant strings of a better way to convert const char * to
Object?

TIA,
KK

Jun 22 '07 #1
5 3978

<ke***********@googlemail.comwrote in message
news:11**********************@p77g2000hsh.googlegr oups.com...
>I want to declare an array of constant strings. In unmanaged C++ I'd
do this

static const char *string[] = { "One", "Two, "Three" };

However if I do this in .NET and want to pass these to a function
which takes an Object * then I get compilation errors. The only way to
avoid these seems to be to create a temporary string on the heap,
e.g.

String *str = new String(string[1]);
function(str);

Which seems a bit wasteful.

If I try to declare my static const array as Strings instead then I
get warnings about not being able to declare managed types as statics.
Is that a function-local static? I know that static strings are allowed.
Please note that const doesn't work in managed code, but there is "initonly"
which is similar. In your case, however, you probably want "literal".
>
What is the right way to do this? Is there a better way to declare the
array of constant strings of a better way to convert const char * to
Object?

TIA,
KK
Jun 22 '07 #2
On 22 Jun, 16:51, "Ben Voigt [C++ MVP]" <r...@nospam.nospamwrote:
<kelvin.koo...@googlemail.comwrote in message

news:11**********************@p77g2000hsh.googlegr oups.com...
If I try to declare my static const array as Strings instead then I
get warnings about not being able to declare managed types as statics.

Is that a function-local static? I know that static strings are allowed.
Please note that const doesn't work in managed code, but there is "initonly"
which is similar. In your case, however, you probably want "literal".
I was trying

const String *strings[] = {S"One", S"Two", S"Three};

Note I'm using VS 2003.
Jun 22 '07 #3

<ke***********@googlemail.comwrote in message
news:11**********************@g4g2000hsf.googlegro ups.com...
On 22 Jun, 16:51, "Ben Voigt [C++ MVP]" <r...@nospam.nospamwrote:
><kelvin.koo...@googlemail.comwrote in message

news:11**********************@p77g2000hsh.googleg roups.com...
If I try to declare my static const array as Strings instead then I
get warnings about not being able to declare managed types as statics.

Is that a function-local static? I know that static strings are allowed.
Please note that const doesn't work in managed code, but there is
"initonly"
which is similar. In your case, however, you probably want "literal".
I was trying

const String *strings[] = {S"One", S"Two", S"Three};

Note I'm using VS 2003.
That's not good. Microsoft has completely dropped support for Managed
Extensions for C++, and there are known bugs with all mixed-mode assemblies
that cannot be worked around. Everyone really needs to upgrade to C++/CLI
as soon as possible to get the compiler fixes, even if you continue using
the old syntax (/clr:oldSyntax). Visual C++ 2005 Express is preferable to
any edition of 2003 from that regard -- all the optimization in the matter
doesn't work if it deadlocks.

Jun 22 '07 #4
On 22 Jun, 21:39, "Ben Voigt [C++ MVP]" <r...@nospam.nospamwrote:
<kelvin.koo...@googlemail.comwrote in message

news:11**********************@g4g2000hsf.googlegro ups.com...


On 22 Jun, 16:51, "Ben Voigt [C++ MVP]" <r...@nospam.nospamwrote:
<kelvin.koo...@googlemail.comwrote in message
>news:11**********************@p77g2000hsh.googleg roups.com...
If I try to declare my static const array as Strings instead then I
get warnings about not being able to declare managed types as statics.
Is that a function-local static? I know that static strings are allowed.
Please note that const doesn't work in managed code, but there is
"initonly"
which is similar. In your case, however, you probably want "literal".
I was trying
const String *strings[] = {S"One", S"Two", S"Three};
Note I'm using VS 2003.

That's not good. Microsoft has completely dropped support for Managed
Extensions for C++, and there are known bugs with all mixed-mode assemblies
that cannot be worked around. Everyone really needs to upgrade to C++/CLI
as soon as possible to get the compiler fixes, even if you continue using
the old syntax (/clr:oldSyntax). Visual C++ 2005 Express is preferable to
any edition of 2003 from that regard -- all the optimization in the matter
doesn't work if it deadlocks.- Hide quoted text -

- Show quoted text -
Sadly we're stuck with VS 2003. In this instance I'm trying to just
use .NET. My problem is that I'm only familiar with standard C++
syntax and I'm not sure what the right way to declare an array of
constant strings in .NET is.

Jun 25 '07 #5

<ke***********@googlemail.comwrote in message
news:11**********************@n2g2000hse.googlegro ups.com...
On 22 Jun, 21:39, "Ben Voigt [C++ MVP]" <r...@nospam.nospamwrote:
><kelvin.koo...@googlemail.comwrote in message

news:11**********************@g4g2000hsf.googlegr oups.com...


On 22 Jun, 16:51, "Ben Voigt [C++ MVP]" <r...@nospam.nospamwrote:
<kelvin.koo...@googlemail.comwrote in message
>>news:11**********************@p77g2000hsh.google groups.com...
If I try to declare my static const array as Strings instead then I
get warnings about not being able to declare managed types as
statics.
>Is that a function-local static? I know that static strings are
allowed.
Please note that const doesn't work in managed code, but there is
"initonly"
which is similar. In your case, however, you probably want "literal".
I was trying
const String *strings[] = {S"One", S"Two", S"Three};
Note I'm using VS 2003.

That's not good. Microsoft has completely dropped support for Managed
Extensions for C++, and there are known bugs with all mixed-mode
assemblies
that cannot be worked around. Everyone really needs to upgrade to
C++/CLI
as soon as possible to get the compiler fixes, even if you continue using
the old syntax (/clr:oldSyntax). Visual C++ 2005 Express is preferable
to
any edition of 2003 from that regard -- all the optimization in the
matter
doesn't work if it deadlocks.- Hide quoted text -

- Show quoted text -

Sadly we're stuck with VS 2003. In this instance I'm trying to just
use .NET. My problem is that I'm only familiar with standard C++
syntax and I'm not sure what the right way to declare an array of
constant strings in .NET is.
The correct way to do anything in .NET 1.1 is with C#. C++ code on .NET 1.1
suffers from the loader lock bug, and there is no workaround except for
upgrading to .NET 2.0 and VS 2005. Even the "/clr:pure" option that
prevents mixed-mode compilation isn't available until VC++ 2005.

So find whoever is mandating VS 2003, and show them this:
http://www.codeproject.com/scrapbook/semicolon_2.asp
and this: http://msdn2.microsoft.com/en-us/lib...66(vs.80).aspx
and this: http://msdn2.microsoft.com/En-US/lib...48(vs.71).aspx

Specifically:

"Second, when loading DLLs in versions 1.0 and 1.1 of the .NET Framework,
the CLR assumed that the loader lock was not held and performed several
actions that are invalid under loader lock. Assuming the loader lock is not
held is a valid assumption for purely .NET DLLs, but, because mixed DLLs
execute native initialization routines, they require the native Windows
loader and therefore the loader lock. Consequently, even if the developer
was not attempting to execute any MSIL functions during DLL initialization,
there was still a small possibility of nondeterministic deadlock with
versions 1.0 and 1.1 of the .NET Framework."

"Consequently, due to the way the loader works in version 1.0 and 1.1 of the
common language runtime, deadlock situations are always possible with mixed
DLLs, even though they are often quite rare in practice. The worst part of
this is that mixed DLLs that happen to work on most systems can begin
deadlocking if the system is stressed, the image is signed (since the
security functionality require more managed code to run during assembly
load), hooks are installed into the system, or the behavior of the runtime
changes through service packs or new releases. In summary, this is a serious
problem that must be addressed for all mixed DLLs."

I'm sorry, but there is no rationale for staying with VS 2003 that can
possibly trump a latent nondeterministic deadlock.

Jun 25 '07 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

10
by: Marcin Kalicinski | last post by:
Why string literals are regarded as char * not as const char *? (1) void f(char *); (2) void f(const char *); f("foo") will call version (1) of function f. I understand that the exact type...
34
by: E. Robert Tisdale | last post by:
Please find attached the physical constants header file physical.h It defines conversion factors to mks units. It might be used like this: > cat main.cc #include<iostream>...
7
by: al | last post by:
char s = "This string literal"; or char *s= "This string literal"; Both define a string literal. Both suppose to be read-only and not to be modified according to Standard. And both have...
8
by: Duncan Winn | last post by:
I am new to VC++7. I am using a method GetPrivateProfileString that requires an LPTSTR. I have defined this as a: char * data_name; I am then trying to convert this to an LPOLESTR and I...
6
by: karthi | last post by:
hi, I need user defined function that converts string to float in c. since the library function atof and strtod occupies large space in my processor memory I can't use it in my code. regards,...
2
by: msaladin | last post by:
Hi all, I spent today with finding an error, I found it, though I don't no why. I have a class with static constants, like this: class EXPORT_API BusConstants { public: static const...
4
by: costantinos | last post by:
Hello. I have a string which looks like and I need to read these numbers. The logical implementation was to read the string char by char and check whether I have a space and when I find one I...
3
by: Kevin Frey | last post by:
I am porting Managed C++ code from VS2003 to VS2005. Therefore adopting the new C++/CLI syntax rather than /clr:oldSyntax. Much of our managed code is concerned with interfacing to native C++...
5
by: polas | last post by:
Good morning, I have a quick question to clear up some confusion in my mind. I understand that using a string literal in a declaration such as char *p = "string literal" declares a pointer to...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.