|
richiebaby wrote: Started using visual studio .NET
Witch one: 2003 or 2005. I will use 2005 syntax for samples.
richiebaby wrote: My C++ brain tells me that I would like to simply use a for_each, like this:
Your sample is wrong.
String has simular behaver like CString.
using namespace System;
using namespace System::Collections;
int main(array<System::String ^> ^args)
{
String ^s = gcnew String("Hello, I am a test String");
array <Char> ^sChars = s->ToCharArray();
IEnumerator ^myEnum = sChars->GetEnumerator();
while (myEnum->MoveNext())
{
String ^ss = (myEnum->Current->ToString());
Console::WriteLine("-{0}-", ss);
}
return 0;
}
|
|
|
|
|
Hi
Thanks for your help, but I'm afraid that I need a little more guidance.
First the answer to your question: I am using .NET 2003.
Some more info: I started a new Windows form project, I then proceeded to create a RichTextBox on the form. So setting the text is easy but I am trying change the font of individual characters within the RichTextBox(don't know if the best solution is to use RichTextBox or not).
So I figured that I would go through each char within the string, apply a font and append to the contents of the RichTextBox (not even sure if possible).
The trouble is I can't seem to get to grips with the .NET framework, I find it harder than good old C++.
Straight away I am slightly lost with your sample code, how can I take your suggested code and import it into the code that .NET has produced for me. Bearing in mind I am not within the main method but within a new that I have created.
For instance, if I have an empty method called outputToScreen(), how can I even start to use your suggested code.
<br />
private: System::Void outputToScreen()<br />
{<br />
<br />
}<br />
If I write:
<br />
private: System::Void outputToScreen(array ^args)<br />
{<br />
}<br />
Then I get "error C6201: syntax error : identifier 'array'"
These are probably dumb question but i am trying to learn, so...
Thank you.
|
|
|
|
|
richiebaby wrote: Thanks for your help, but I'm afraid that I need a little more guidance
Sure, that's whay we are here.
richiebaby wrote: First the answer to your question: I am using .NET 2003.
It was a long time ago when i used VS2003.
Some syntax diffrences betwen VS2003 and VS2005 (List is incomplete
VS2003 VS2005
new gcnew
__gc (In gc container, you don't use it)
* (pointer def.) ^
(String *sArray = new String __gc *[10]; array (defin. for ar.)
VS2003 using managed c++(obsolete syntax). VS2005 is using newer syntax called C++/CLI. Currently i have vs2005 installed, so i can't garanity, that my code is bug free.
richiebaby wrote: Straight away I am slightly lost with your sample code, how can I take your suggested code and import it into the code that .NET has produced for me. Bearing in mind I am not within the main method but within a new that I have created.
you can use it as find the position. But it is VS2005 syntax, i forgot how it look like in VS2003.
richTextBox1->Text = "Hello, World.";
richTextBox1->Select(7,5);
richTextBox1->SelectionFont = new System::Drawing::Font("Tahoma", 12, FontStyle::Bold);
richTextBox1->SelectionColor = System::Drawing::Color::Blue;
richTextBox1->DeselectAll();
You can sceep command Select(int, int), SelectAll() and DeselectAll(), if you intend to select a text with a mouse.
richiebaby wrote: The trouble is I can't seem to get to grips with the .NET framework, I find it harder than good old C++.
Because you are used to. I couldn't learn c++ (MFC and Win32) is due to an problems with converting from one to another parameter. In .NET i could Use like String::ToInt32(S"666");
|
|
|
|
|
After a bit of hacking I have found a working solution.
Many thanks to the person who posted their code.
Here is a copy of what I was trying to achieve
<br />
private: System::Void outputToScreen()<br />
{<br />
textBox->Clear();<br />
<br />
System::String *temp_text_string;<br />
<br />
text_string = S"Hello I am a test string";<br />
<br />
Array *stringArray;<br />
<br />
stringArray = text_string->ToCharArray();<br />
<br />
IEnumerator *myEnum = stringArray->GetEnumerator();<br />
<br />
while (myEnum->MoveNext())<br />
{<br />
temp_text_string = (myEnum->Current->ToString());<br />
<br />
textBox->SelectionFont = new System::Drawing::Font( "Arial",12,FontStyle::Italic );<br />
<br />
textBox->SelectedText = temp_text_string;<br />
} <br />
<br />
}<br />
So there we have it, I am much happier now that I have something to work on.
I know it's ugly but I'm happy seeing as I've only used .NET for less than 48 hours.
Thanks again
|
|
|
|
|
I have this very wierd error message in Visual C++ Express 2005:
1>.\UIEvents.cpp(252) : error C2860: 'void' cannot be an argument type, except for '(void)'
1> This diagnostic occurred while importing type 'VLCWPF::SkinInterface::PlaylistItem ' from assembly 'VLCWPF, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. Here's the offending code:
InputItem *inputitem = item->get_InputItem(); What's most wierd to me is that I can't find anywhere where this mysterious void could be coming from. The class InputItem is very simple, so I can't see why it would have problems:
public class InputItem
{
public InputItem(string name, string uri, string[] inputOptions, int id, InputInterface.InputType inputType)
{
this.name = name;
this.uri = uri;
this.inputOptions = inputOptions;
this.id = id;
this.inputType = inputType;
}
public InputItem(string name, string uri) :
this(name, uri, null, 0, InputInterface.InputType.Unknown)
{
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Uri
{
get { return uri; }
set { uri = value; }
}
protected string name;
protected string uri;
protected string[] inputOptions;
protected int id;
protected InputInterface.InputType inputType;
}
Can anyone make any suggestions? I can't figure out for the life of me what could cause this.
Joel Holdsworth
|
|
|
|
|
First of all, your InputItem class looks like C#. Assuming the class is located in a C# assembly, your problematic code should look like something like this:
InputItem ^inputitem = item->get_InputItem();
The "*" is for unmanaged code.
|
|
|
|
|
George L. Jackson wrote: The "*" is for unmanaged code.
And for old Managed c++
|
|
|
|
|
I almost forgot! The "get_" in "item->get_InputItem()" may also be a problem!
|
|
|
|
|
You're using 2 different languages here. I don't know that C# has a dereference operator, except in unsafe blocks.
Thanks,
John
|
|
|
|
|
Hi All,
I am using VC++ 2005 Express and SQL Server express. The database MyDB has shown in the Data Sources panel after applying "add new data source" steps. In the MYDB, there is a table called "MyTable", which is also shown in Data Sources panel. How do I transfer data from MyTable to a DataTable ("dtTable")? I tried following codes but it didn't work.
SqlDataAdapter^ sqlAdapter;
DataTable^ dtTable;
sqlAdapter = gcnew sqlDataAdapter("select * from MyTable", "MyDB");
dtTable = gcnew DataTable("dtTable");
sqlAdapter->Fill(dtTable);
Any suggestions? Thanks in advance.
Kevin
|
|
|
|
|
I don't see any connection string or code to talk to the database!
|
|
|
|
|
Thanks George. I thought that, when a database was shown in the Data Sources panel, the connection codes were implied. I'll add connection codes and try again.
Kevin
|
|
|
|
|
Hi,
I do have the following structure in vc++
public ref struct structExample
{
int a;
char b;
float c;
};
i need to copy the array of bytes value into this structure,
Generally if the structure is not a managed type we use "memcpy()" to copy the contents into the structure.
Similarly how can be done this ,in case of managed structures
Thanks in advance
Sangeetha
|
|
|
|
|
Hi,
basically the BitConverterClass should meet your requirements. But most likely there is a more elegant way to do this.
e.g.
structExample^ strEx = gcnew structExample();
strEx->a = BitConverter::ToInt32(byteArray,indexofyourinteger);
regards Tobias
|
|
|
|
|
I need to copy the array elements into the structure on a whole at a stretch as "memcpy()" does in ummanaged code, since I do have 100 elements/members in the structure.
|
|
|
|
|
Well you can either use serialize/deserialize on your struct or you could actually use one of these methods:
Marshal::PtrToStructure(...);<br />
Marshal::StructureToPtr(...);
Please note that those methods marshal data from a managed object to an unmanaged block of memory and vice versa. Further information is also provided here:
http://www.dotnet247.com/247reference/msgs/57/289239.aspx[^]
regards Tobias
|
|
|
|
|
Hi,
I want to raise an event from my code in vc++.
while raising the event i need to check for the null.
Basically to know whether some one has registered for this event . How the event can be checked for the Null value.
if it is not checked System::NullReference Exception is thrown
thanks in advance,
Sangeetha
|
|
|
|
|
try if ( event == nullptr )
rgds...mil10.
|
|
|
|
|
This gives the error as follows
error C3918: usage requires 'event' to be a data member
Regards
Sangeetha
|
|
|
|
|
seems u have no declared the evenet object properly. Please post the code.
rgds...mil10.
|
|
|
|
|
|
Here is the sample explaining why i need to check for a null.
Example:
public void delegate MyEventHandler();
public ref class MyClass
{
int i = 0;
public event MyEventHandler ^ MyEvent;
public SampleFunction
{
if(MyEvent!= nullptr) //raises C3918
{
MyEvent();
}
else
{
throw exp;
}
}
}
NOTE : I do register this event in some other class on certain conditions . So if it is not registered i need to throw it as a exception.
So it would be beeter if i check it for a null.
How can be this be done
Regards
Sangeetha
-- modified at 1:05 Monday 3rd April, 2006
|
|
|
|
|
hi,
As mentioned in those forums, it is impossible to check an event against nullptr in c++/cli but you could actually use a public delegate as data member instead.
regards Tobias
|
|
|
|
|
Hi,
immediately after telling you to use a delegate i found myself confronted with a similar problem.
Though i had to find a solution for myself as well. Basically in my case, i need to check a remote event for any dead delegates which are still connected to it. Otherwise it will end up in a remoting exception each time i'll raise the event. So i did the following:
public delegate void SensorUpdatedEventHandler (Object^, UpdateEventArgs^);
public ref class SensorWebLink : ...
{
...
SensorWeblink()
{
_RemotelyInvokedDelegates = nullptr;
}
...
...
private:
static SensorUpdatedEventHandler^ _RemotelyInvokedDelegates;
public:
event SensorUpdatedEventHandler^ SensorUpdatedEvent
{
void add(SensorUpdatedEventHandler^ pDelegate)
{
_RemotelyInvokedDelegates += pDelegate;
}
void remove(SensorUpdatedEventHandler^ pDelegate)
{
_RemotelyInvokedDelegates -= pDelegate;
}
void raise(Object^ pObject, UpdateEventArgs^ pEvtArgs)
{
if (_RemotelyInvokedDelegates)
{
_RemotelyInvokedDelegates->Invoke(pObject, pEvtArgs);
}
}
};
void RaiseSensorUpdatedEvent (UpdateEventArgs^ pEvtArgs);
};
void SensorWebLink::RaiseSensorUpdatedEvent(UpdateEventArgs^ pEvtArgs)
{
if(_RemotelyInvokedDelegates == nullptr)
{
Console::WriteLine("No listeners");
}
else
{
Console::WriteLine("Number of Listeners: {0}",_RemotelyInvokedDelegates->GetInvocationList()->Length);
SensorUpdatedEventHandler^ temporaryHandler = nullptr;
for each( Delegate^ del in _RemotelyInvokedDelegates->GetInvocationList())
{
try
{
temporaryHandler = (SensorUpdatedEventHandler^) del;
temporaryHandler(this, pEvtArgs);
}
catch( Exception^ e )
{
Console::WriteLine( e->ToString() );
_RemotelyInvokedDelegates -= temporaryHandler;
}
}
}
} Btw. I had this idea after reading this msdn article:
http://msdn2.microsoft.com/en-US/library/5f3csfsa(VS.80).aspx[^]
cheers Tobias
|
|
|
|
|
er... it's a kind of programing question but I though of asking it here as no one know the answer to this question out of all mainstream categories anyway....
I wrote a ManagedC++/.NET wrapper around Uniscribe. Which is the lowest level international text rendering (win32) API as I understand it.
With it I'm able to do custom rendering of formatted international text.
That's all good.
(For the curious who don't know it, you use various ScriptXXX to perform text analysis and then you finally render 'glyphs' (as opposed to characters) with ScriptTextOut)
Now come the problem, when I try to print.
I even manage to achieve perfect WYZIWIG behavior, that's cool and it works well on my work computer, on many customer's computer, on my home computer.
BUT, for some customer the preview is completely blank.
And for some other the printed page is completely blank as well.
What could it be?
How to fix that?
Any ideas?
Yep I have already (and unsuccessfuly) tried news://news.microsoft.com/microsoft.public.win32.programmer.international
-- modified at 23:31 Wednesday 29th March, 2006
|
|
|
|