|
Hi
how to Convert Struct To Byte
|
|
|
|
|
What do you mean by convert ?
Prasad
MS MVP - VC++
|
|
|
|
|
Socket ^s;
s->Send(byte.........
I want to send struct
|
|
|
|
|
The simplest method would be to create a Byte array the size of the structure and copy the structure bytes to the array.
MyStruct mystruct;
array<Byte>^ ByteArray = gcnew array<Byte>(sizeof(MyStruct));
for (int i = 0; i < sizeof(MyStruct); i++)
ByteArray[i] = ((unsigned char *)&mystruct)[i];
Socket ^s;
s->Send(ByteArray); There's other problems which may or may not be a factor in your situation See here[^]
A more robust solution is to make classes/structs serializable so the conversion to/from a Byte array
is built in to the class.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Dont work
my struct is manage
ref Struct MyStruct
{
}
but sizeof dont work for manage Struct
|
|
|
|
|
Oh In that case you should probably use serialization.
Serializing Objects (.NET)[^]
You can use .NET serialization (like Binary Serialization[^]) or you could serialize
the struct yourself by writing whatever bytes make up the structure.
.NET serialization is robust and has the bonus of working with other .NET languages.
If the data is being sent to non-.NET apps then you'll need to write custom serialization.
Regardless of the method you use, you need a array of bytes - you can fill that array
however you want, as long as there's enough info there for the receiving end to reconstruct
the structure.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Dear Sir,
How do you print in Visual c++ NET 2005 ?
|
|
|
|
|
hey mikobi you've been on CodeProject for a while now, why don't you look through the articles to see if there are things that will help you in there?
led mike
|
|
|
|
|
Dear Sir,
I don't see what can help me, that is why I ask if someone know an article out side this site that can help me.
Often, they give some references that are not in this site.
Can you show me in this site, what can help me among articles are under Desktop -> Printing.
I Am waitting
|
|
|
|
|
Following is my issue.
-------------------------------------------
I have a unmanaged application ( C++ , .exe ) which has a class CMyClass
with a public member fMyFunct(). You can assume this C++ application is built with /clr option.
I need to instantiate CMyClass in a different managed ( C# ) application and call fMyFunct().
Many thanks if any of you can send me a sample which demonstrate above things ( Remember I can't manipulate C++ application apart from project settings. But you can do anything in C# application )
----------------------------------------------------
|
|
|
|
|
You can't create native/unmanaged C++ objects from managed code like C#.
You need to write a managed (ref) class wrapper for the unmanaged C++ class.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi, I m a VC++ guy, i have worked on VC++ / MFC / C++ . But at present working only on C++ . Like to move into .Net , can someone guide me which would be the better option to learn WebApplications Or windows application , even in case of Carrier growth.
Also VC++.NET has scope like C# ?
Newww
|
|
|
|
|
I'd say C# and Winforms first, then move into C#/ASP.NET. that means you'll be on more stable ground as you move into C#.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Hi Thanks , Can u guide me how to learn Windows forms (thou i m experianced in MFC) and web application faster ? Doing small applications or learning the concepts of .Net and etc ?
Thanks.
|
|
|
|
|
I am trying to cut 3 bytes from the data read from the file and keep getting error. Here is the error and the code.
**************************************************
///error C2228: left of '.substr' must have
class/struct/union
***************************************************
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string>
#include <fstream>
using namespace std;
string DataCut;
struct s {
char test[4];
char test1[4];
};
struct s myStr;
int _tmain(int argc, _TCHAR* argv[])
{
char *str1, Mycut[4];
char str[80000];
string sear1;
size_t result;
fstream file_op("c:\\ProjectRead.txt",ios::in);
while(!file_op.eof())
{
file_op.getline(str, 80000);
str1 = str;
*********************************************************************
Mycut = str.substr(0,4); /// Error here
cout << str1;
*********************************************************************
} file_op.close();
system("PAUSE");
return 0;
}
|
|
|
|
|
Since this question is unrelated to managed C++, please post on the correct
board - The Visual C++ / MFC Board[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi, I tried to pass data between forms in VC++. I want to pass input data from child's textboxes to parent when child form closes.
But all i have is errors. Can you tell me where my mistake(s) is ?
//R2.h (Parent Form)
#include Yeni.h
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace xxx {
public ref class R2 : public System::Windows::Forms::Form
{
........... auto generated code.............
}
//The Button which creates Child Form
private: System::Void pictureBox2_Click(System::Object^ sender, System::EventArgs^ e) {
MdiParent->ActiveMdiChild->Close();
Yeni^ YRForm = gcnew Yeni();
YRForm->MdiParent=this->MdiParent;
YRForm->Show();}
//The Button in child form, which closes child form
private: System::Void Yeni::pictureBox1_Click(System::Object^ sender, YeniUpdateEventArgs^ e)
{
String^ A = e->Isim;
String^ B = e->Soyad;
MessageBox::Show(this,"Isim : "+A+"Soyad : "+B,"Durum",MessageBoxButtons::OK);
}
//Yeni.h (Child Form) (I'm not sure where I should add "delegate")
using namespace System;
using ..........
....
namespace xxx {
public: delegate void YeniUpdateHandler(System::Object^ sender, YeniUpdateEventArgs^ e);
public: YeniUpdateHandler^ YeniUpdated;
public ref class YeniUpdateEventArgs : public System::EventArgs
{
private: String^ mIsim;
private: String^ mSoyad;
public: YeniUpdateEventArgs(String^ sIsim, String^ sSoyad)
{
this->mIsim = sIsim;
this->mSoyad = sSoyad;
}
public:
property String^ Isim
{
String^ get
{
return mIsim;
}
}
public:
property String^ Soyad
{
String^ get
{
return mSoyad;
}
}
};
public ref class Yeni : public System::Windows::Forms::Form
{
........... auto generated code.............
}
//The Button which closes child form
private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ sIsim = textBox1->Text;
String^ sSoyad = textBox2->Text;
YeniUpdateEventArgs^ args = gcnew YeniUpdateEventArgs(sIsim, sSoyad);
YeniUpdated(this, args);
this->Close();
}
I have 84 errors ) Most of them is syntax errors. What are my mistakes ? Is anything missing in code or did i place smtg wrong?
Thank you very much...
PS:Please don't suggest any solution or example in VC#, because after i tried to translate, onlything that i had was errors and i
didn't have find any example in VC++.
|
|
|
|
|
What are the 84 errors you are getting?
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
Thank your for your respond. Finally i solved it. I add a new header to project and move the EventArgs class to there. Now it works...
|
|
|
|
|
Hi, I'm using C++/CLI with Visual Studio 2005. I have finally gotten my ListView control to function properly when I add records to the control because there is a this->myListView->Items->Add(record). But the this->myListView->Items::get() function returns a ListViewItemCollection^ but the code will not let me define a ListViewItemCollection^ to read the collection into. I have been Googling this all day it's gotten to be hair pulling time. I have a ListView with 4 columns and all I want to do is walk the list, read each record, and sperate the record's fields into the appropriate variables. Any help would be appreciated.
Thanks,
Buck
|
|
|
|
|
I don't think you can create one, it needs to be attached to a listview. Read the items directly, or create a typed List to copy them into with foreach, if you must.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Yes, reading the items directly would be fine. How do you do that? I can define the record and while trapped in the debugger I can see the information but it is of type ListViewSubItemCollection^ and the compiler will not let me define one. Here is the code.
ListViewItem^ myRecord = gcnew ListViewItem();
myRecord = this->myListView->Items[0];
ListViewSubItemCollection^ myCollection = myRecord->SubItems::get(); // It won't let me define this collection.
If I trap after assigning Items[0] to myRecord I can go to either the Autos or Locals tab and expand myRecord and I can see subItems collection with the data or expand the SubItems and I can see the subItems collection. I just need the correct syntax to read the data from the ListView.
Buck
|
|
|
|
|
Get is a "getter" method for a property. You don't call it directly.
Does this work?
ListViewSubItemCollection^ myCollection = myRecord->SubItems;
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
No, if I try to define like that the compiler complains that ListViewSubItemCollection^ is not defined (the namespace System::Collections is defined). I get the same error if I try to define a ListViewItemCollection^ or if I try to use gcnew with them.
Yeah, I usually don't call ::get(). I will type it out that way so that I can see through the intellisense what type the get() function is going to return and then I can define an appropriate variable.
If you ever find out of a way to declare a ListViewItemCollection^ or ListViewSubItemCollection^ email me if you can.
Thanks,
Buck
|
|
|
|
|
See my code in my most recent post - I tested it, it works fine.
The compiler will always complain if it doesn't know the type.
The "ListViewItem::ListViewSubItemCollection" class is not in "System::Collections".
It's in System::Windows::Forms.
"ListViewSubItemCollection" is a subclass nested class in the "ListViewItem" class.
The fully qualified type is "System::Windows::Forms::ListViewItem::ListViewSubItemCollection"
Of course, if you have "using System::Windows::Forms;" somewhere above, you can shorten the type to
"ListViewItem::ListViewSubItemCollection".
Make sense?
Mark
Last modified: 22mins after originally posted --
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|