|
Yay, a stab in the dark, and a hit!
It does confirm my general tactic of actually reading the error message before bothering to look at the code.
|
|
|
|
|
I want to preview doc file using CreateFromFile of COleClientItem.Tis method takes COleDocument object as argument.
Sometimes CreateFromFile success and i can see the preview but sometimes it's fail for same file. I did not understand the reason why. Can someone guide me? Is there any memory problem?
Also if i have office 2003 installed at my system and to open ofice 2007 file i installed utility provided by microsoft.
Using CreateFromFile if i want to preview office 2007 file then CreateFromFile failed. But in some cases it's succeed and i see the file name in preview contents.How to see the actual contents? Should i use any other function in this case.
|
|
|
|
|
Are you initializing the OLE libraries?
|
|
|
|
|
I used CoInitialize(NULL) and AfxEnableControlContainer(); in InitInstance.
Is there something else which i sould do
|
|
|
|
|
Try calling AfxOleInit() in InitInstance.
|
|
|
|
|
AfxOleInit did not solve the problem.
Let me describe in details how i am doing
i create a mfc dll.In this dll i create below classes
class CDocData : public COleDocument
class CEmbedWordCntrItem : public COleClientItem
class CViewData : public CView
Is there any example for createfromfile
modified on Thursday, April 14, 2011 4:15 AM
|
|
|
|
|
I would like to retrieve week number from a given year, month and day. I guess it's something with the tm and time_t structs but I can't figure it out. I'm looking for a function like this:
int Week(int year, int month, int day)
{
int week;
return week;
}
Thanks for any help!
|
|
|
|
|
|
|
My attempt:
int week(int year, int month, int day)
{
int wk;
struct tm nyd, id; int fs;
nyd.tm_hour=12;
nyd.tm_min = 0;
nyd.tm_sec = 0;
nyd.tm_mday = 1;
nyd.tm_mon = 0;
nyd.tm_year = year-1900;
mktime(&nyd);
id.tm_hour=12;
id.tm_min = 0;
id.tm_sec = 0;
id.tm_mday = day;
id.tm_mon = month-1;
id.tm_year = year-1900;
mktime(&id);
fs = 6 - nyd.tm_wday;
if ( fs >= id.tm_yday) return 1;
wk = (id.tm_yday-fs) / 7;
if ((fs + wk*7) >= id.tm_yday) return (wk+1);
return (wk+2);
}
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi,
When I compile my program as a release it crashes when I try to run it. However the debug version works.
It doesn't give any specific errors.
Any suggestions?
Thanks.
|
|
|
|
|
Cyclone_S wrote: Any suggestions?
yes, three of them:
1. make sure you have adequate problem logging within your app; every exception should be logged; every API call should have its return value checked, and abnormalities need logged.
2. read Surviving the Release Version[^]
3. read Debugging Release Mode Problems[^]
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
good links luc... we replied almost simultaneously...
|
|
|
|
|
none at all? are you sure you get absolutely no errors? even if not specific, post them and that'll give us a clue as to the problem.
the debug software version does a few things differently so that the software doesn't crash immediately following an error, to allow for debugging. one such case is accessing an out of bounds location within an array, either to read or write... the release version would crash immediately, the debug version might not (will likely be caught with an ASSERT of some sort).
|
|
|
|
|
Thanks for your reply. I found the function that crashes the Release version.
I get the error "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
So it's either MyArray[50] that crashes it or the string builders.
<br />
void Read_Text()<br />
{<br />
char ch;<br />
int i;<br />
char MyArray[50];<br />
ifstream in("scores.ini", ios::in | ios::binary);
<br />
<br />
while(in && ch)
{
i++;<br />
in.get(ch);<br />
if(in) {MyArray[i-1] = ch;}<br />
}<br />
in.close();
<br />
StringBuilder^ sbA = gcnew StringBuilder(); <br />
int iA = 0;<br />
for(iA;MyArray[iA] != '_';iA++)
{<br />
sbA->Append((Char)MyArray[iA]);<br />
}<br />
String^ s = sbA->ToString();
score1 = Convert::ToInt32(s);<br />
<br />
StringBuilder^ sbB = gcnew StringBuilder(); <br />
int iB = iA+1;<br />
for(iB;MyArray[iB] != '_';iB++)
{<br />
sbB->Append((Char)MyArray[iB]);<br />
<br />
}<br />
String^ sB = sbB->ToString();
score2 = Convert::ToInt32(sB);<br />
<br />
StringBuilder^ sbC = gcnew StringBuilder(); <br />
int iC = iB+1;<br />
for(iC;MyArray[iC] != '_';iC++)
{<br />
sbC->Append((Char)MyArray[iC]);<br />
<br />
}<br />
String^ sC = sbC->ToString();
score3 = Convert::ToInt32(sC);<br />
<br />
StringBuilder^ sbD = gcnew StringBuilder(); <br />
int iD = iC+1;<br />
for(iC;MyArray[iD] != '_';iD++)
{<br />
sbD->Append((Char)MyArray[iD]);<br />
<br />
}<br />
String^ sD = sbD->ToString();
score4 = Convert::ToInt32(sD);<br />
<br />
<br />
if(show_msge==true){MessageBox::Show("Top Scores\n" + Convert::ToString(score1) + "\n" + Convert::ToString(score2) + "\n"+ Convert::ToString(score3) + "\n" + Convert::ToString(score4));}<br />
}<br />
|
|
|
|
|
wow, guess i'll start from the top:
- the initial statement while(in && ch) never has ch initialize
- index i never gets initialized
- are you checking for underscores? what happens if there's no underscore in your loop? runs until program breaks...
- you never check if any indexes will write out of bounds of the array
those are just some observations... and I didn't even bother going through it all because its so bad
|
|
|
|
|
Albert Holguin wrote: - index i never gets initialized
My bet is on that one.
I agree that there are many other problems, e. g. it should be just while (in) since ch==0 is a valid input. Also, why not use >> operators rather than get() ?
Besides, @OP, use the <pre> tags to format a block of code, not <code>.
|
|
|
|
|
don't know if I'd agree with using >> instead of get() , but there's a lot of problems in that code either way. i hope this is OP's homework and not work.
|
|
|
|
|
My point of using >> is that you can read a variable with just one command rather than put it together byte by byte. It might be difficult though to change the code, depending on the complexity of the data structure within that file. Also, the data in that file have to be stored in the right way, i. e. using << , to make sure they will be properly read using >> .
If all you ever use from ifstream is get() , then I have to ask, why use ifstream at all? That's like using MS Word for SMS...
|
|
|
|
|
>> is not type safe and reading incorrect input type leads to undefined behavior
|
|
|
|
|
Same with bytewise input: you just delay the problem from the reading part to the interpreting part. In either case you have to somehow validate the resulting values. Unfortunately this is almost impossible with binary inputs, and for that reason alone I'd retract my suggestion of using >> here.
|
|
|
|
|
a couple of other things... this is managed C++, belongs in the C++/CLI forum... what happens if your open file fails? the function will lead to a program crash since you have no error handling... i really hope this is just pseudo-code and not your real thing, if its your real thing, you may want to take a step back to the basics.
|
|
|
|
|
Its the real thing. Yea I know its bad but it works for what i'm doing. Suggestions on how to improve it are welcome.
|
|
|
|
|
As a rule of thumb, I found that most crashes that only happen in release versions are due to lack of intialization: In debug mode, all variables are initialized with 0 by default. In release mode, this is not the case. Specifically for pointers this can have disastrous consequences, e. g. when you test try to delete an object from a non-null pointer which presumably points to an object created by new.
The best way to avoid these type of errors is to always explicitely initialize a variable on the same line that declares them.
The best way to treat with these errors is locate the part of the code that causes it, and make sure every variable is properly initialized.
|
|
|
|
|
Well you guys were right about not initializing those variables. That fixed the problem. Thanks.
I'm not sure what's wrong with my code. How would you re-write it. I'm checking for under scores to check for the next score.
The file looks like this:
100_
200_
300_
400_
|
|
|
|