|
There are several ways depending on what exactly you want. If you are willing to go XP only, you can use a built in API for burning data disks. Doesn't work with 2000 or 98 though.
NERO has (sells? I'm not sure) a kit with an API for doing this. Even though I've never checked it out I'd guess this is the best solution. It works around firmware bugs in different drives, and the differences between the various MMC versions. I haven't looked at it so I don't know how much it does. There are a couple others that google will find too.
The hardest, but the one that gives you the most control: get the scsi specifications form t10.org. (nearly all CD drives speak scsi, even IDE drives. I don't think there are any exceptions faster than 2x or maybe 4x) Get the ISO specifications (free from ECMA, otherwise pay), or UDF specifications (half from OSTA, half from ECMA) and start working. Then figure out how to talk to the device directly with your OS (isn't hard, but NT bases systems are different from 95 based systems, and unix is different again). Last get one of every device and work around all the various bugs that each one has.
I've done the last one myself. It gives you the most control, but you also have to control a lot. Power calibration, write speed, track mode. Some of the above you have several choices, and you almost have to guess which one you should use.
|
|
|
|
|
Hi!
I have had a problem yesterday and written code as suggested. I have it now working.
I have a class CBook and another class CSubject . CSubject has a member which is a CList of CBook pointers. I want to serialize my CSubject object together with any CBook objects it contains.
I wrote my code like was suggested and inherited both from CObject . I overloaded the CObject Serialize() member function in both CBook and CSubject and added the MFC serialization macros. When serialize a CSubject object to disk the data file that is created contains all the data I want. The data is the subject and all the books I add to the subject. So that works very well but now I come to deserialize from disk and I have problems. How do I know how to create enough books when I am calling the Serialize() function? I thought I must be able to in the CSubject::Serialize() function count the books in the list first and store the number. When I deserialize I then know how many to try to get?
Is this the right way to do what I want?
What is really the point in the COBject inheritance? What value must it give to me as I think I am doing all the work in my Serialize() functions myself!
|
|
|
|
|
I suggest you to change the architecture of your class to :
This is corrected way to serialize a List Object.
I Write only the important parts to serialize a list.
//Header File .h
class CBook: public CObject
{
public:
DECLARE_SERIAL(CBook)
CBook();
// You must implement CopyConstructor and = operator.
CBook(const CBook& objSource);
CBook& operator=(const CBook& objSource);
virtual void Serialize(CArchive& ar); // Implement your serialization
public:
CString m_sName;
};
class CBookList: public CList<cbook, cbook&="">
{
public:
CBookList();
virtual ~CBookList();
}
template <> void AFXAPI SerializeElements <cprvfile>
(CArchive& ar, CPrvFile* pNewPrvFile, int nCount);
class CSubject : public CObject
{
public:
DECLARE_SERIAL(CSubject)
CSubject();
virtual void Serialize(CArchive& ar); // Implement your serialization
public:
CString m_sName;
CBookList m_BookList;
};
// Implementation File .cpp
// The Secret of Serialize List Elements !!!!
template <> void AFXAPI SerializeElements <cbook>
(CArchive& ar, CBook* pNewBook, int nCount)
{
for (int i = 0; i < nCount; i++, pNewBook++)
{
// Serialize each CBook object
pNewBook->Serialize(ar);
}
}
Enjoy it
Rodrigo Pinho Pereira de Souza
|
|
|
|
|
Thank you.
This looks hard. Is there any benefit over what I was suggesting I do with storing the number of objects so I know how many to restore?
Also what about using CObList ? This provides a Serialize() function which I may be able to call. Will this restore my list of objects with no further work? I think I could have a data member in my CSubject class which is of type CObList . When CSubject::Serialize() is called I must then only have to call CObList::Serialize() yes?
I am quite confused with all this. I can make it work now though and it looks good but then I hear that there are other ways that can be better though not easier
I also still do not understand why CObject provides any function to me. As I can tell it just gives me a Serialize() function as a declaration which I must then write anyway.
|
|
|
|
|
The benefit is that with this implementation, you will using a real Object Oriented Concepts.
I think that is more clear to understand, and easy to implement than use CObList Member Variable.
Look in MSDN for template SerializeElements, and you will see that Microsoft recommend use this template when you want to serialize element. Is more efficient and trustable.
If you want, I can send you an example for Serialization of List. I will write an article, that I will use this example.
mail me : rpinho@mobiledeveloperspace.de
regards,
Rodrigo Pinho Pereira de Souza
|
|
|
|
|
You could Serialize out the number of books written before the serialized books. Then on deserialize read the number of books, create the books and read them back in.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fuity and sweet. I'm jelly, what am I? - David Williams (Little Britain)
|
|
|
|
|
Yes that is what I thought I must do. I think it is very easy to do this way but someone else has suggested using a CList member and to call its serialization support.
|
|
|
|
|
This works, but personally, I only use this method to serialize data which the datatype is not supoorted by Serialization, like TCHAR*.
regards,
Rodrigo Pinho Pereira de Souza
|
|
|
|
|
Hello people, I'm trying to learn a few more of C++ once that I know another language. My question is... I have an array of unsigned char like this "unsigned char myArr[6]" and I want to get these values and show them into a Static Text (Visual C++) and I don't know how to convert these unsigned char array to char* or any type of "string". Can anyone help me?
thanks!
Wender Oliveira
.NET Programmer
|
|
|
|
|
Try it.
char myArr[6];
SetDlgItemText(ID_EDIT, myArr);
If you are beginner with Visual C, I suggest you to use MFC classes, Then, you will get CString class, that are similar to String from .Net
Enjoy it.
Rodrigo Pinho Pereira de Souza
|
|
|
|
|
pinhopro wrote:
SetDlgItemText(ID_EDIT, myArr);
no way. it is only if you consider that one of the 6 chars of the array contain a '\0'
no, to display each char, prefer that :
CString str;
<font style="color:blue;">char </font>myArr[6];
<font style="color:green;">
str.format(<font style="color:purple;">"%c%c%c%c%c%c"</font>, myArr[0], myArr[1], myArr[2], myArr[3], myArr[4], myArr[5]);
<font style="color:green;">
((CStatic*)GetDlgItem(IDC_MYSTATIC))->SetWindowText(str);
TOXCCT >>> GEII power
|
|
|
|
|
Wender, I have not logged many hours on Visual C++ .net but I think what you are asking to do is called a cast. Changing one type to another. However, an array really is a pointer as your myArr[0] would be the address of the array. So if you said printf("%s\n", myArr); your getting the all 6 items as opposed to: printf("%s\n", myArr[1]); where you will get the first character.
|
|
|
|
|
Anonymous wrote:
myArr[0] would be the address of the array
myArr would be the address, it is an unsigned char*. myArr[0] is the first character in the array.
Anonymous wrote:
So if you said printf("%s\n", myArr); your getting the all 6 items
No! There is only room for 6 characters in array and the last character must be '\0', so you would be printing only the first characters
Anonymous wrote:
printf("%s\n", myArr[1]); where you will get the first character.
This is just wrong! myArr[1] is the second, not the first charater and it is not a string pointer, so the results will be undefined. The %s expects a string pointer not a character value.
INTP
|
|
|
|
|
Assuming you want to display all 6 characters then you need to set the array size to 7, since the last character must be '\0'.
Exmaples:
1) unsigned char myArr[7]={"012345\0"};
2) unsigned char myArr[7];
myArr[0] = '0';
myArr[1] = '1';
myArr[2] = '2';
myArr[3] = '3';
myArr[4] = '4';
myArr[5] = '5';
myArr[6] = '\0';
Now it you want a char* insted of a unsigned char* just cast it: (char*)myArr. This is safe because both unsigned char and char are the same size.
There are other ways, but why make life difficult.
INTP
|
|
|
|
|
HI,
Wt r the Differnces between Structures and Classes
one i know is its Defualt Access specifiers.
in structure it is Public. and in Class it is Private.
tell me more
thanx
|
|
|
|
|
|
As i think we can add methods to Structure tooo
is it ?
any other difference
Assume it was interview Question to me
|
|
|
|
|
You can add methods to structures. I can only see that you can't inherit from structures. No polymorphism.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fuity and sweet. I'm jelly, what am I? - David Williams (Little Britain)
|
|
|
|
|
it means simply that if we not inherit structures ,,
then we can not attain the Concepts of OOP with structers.. is it.
any other difference ??
thanx
|
|
|
|
|
I can't think of any other difference.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fuity and sweet. I'm jelly, what am I? - David Williams (Little Britain)
|
|
|
|
|
Antony M Kancidrowski wrote:
I can only see that you can't inherit from structures.
Have you not seen the CRect class? It is derived from the tagRECT struct. This is perfectly legal:
struct s
{
};
class c : public s
{
};
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
That isn't a struct inheriting from a struct, which is what I meant. Point taken however.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fuity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Williams (Little Britain)
|
|
|
|
|
Antony M Kancidrowski wrote:
That isn't a struct inheriting from a struct, which is what I meant.
But this is:
struct s1
{
};
struct s2 : public s1
{
};
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
OK, I have learnt something new. I have never seen such a struct definition. Noted and commited to memory.
Thanks David
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fuity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Williams (Little Britain)
|
|
|
|
|
in c++, a class and a struct are the same, except that in the case of a struct, members are public by default, and in a class, members are private by default.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|