|
Yeah, I upvoted his answer but your answer sure made me
|
|
|
|
|
Going strictly by OP's question yours is the most succinct answer possible.
Have a 5!
"With sufficient thrust, pigs fly just fine."
Ross Callon, The Twelve Networking Truths, RFC1925
|
|
|
|
|
This book might be just for you: Secure Programming Cookbook for C and C++[^].
Content information:
•How to avoid common programming errors, such as buffer overflows, race conditions, and format string problems
•How to properly SSL-enable applications
•How to create secure channels for client-server communication without SSL
•How to integrate Public Key Infrastructure (PKI) into applications
•Best practices for using cryptography properly
•Techniques and strategies for properly validating input to programs
•How to launch programs securely
•How to use file access mechanisms properly
•Techniques for protecting applications from reverse engineering
[Edit]
Just in case I've decided to add this link to a SSL tutorial: C++ Socket library tutorial[^].
[/Edit]
Regards,
Manfred
"With sufficient thrust, pigs fly just fine."
Ross Callon, The Twelve Networking Truths, RFC1925
|
|
|
|
|
I think you just answered half the questions on this board.
Two very excellent links.
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
Im writing some data in to file.
For that, im taking values and assign it to the struct varaible and then i add that sruct to CPtrList.
Then im writing this CPtrList in file.
But it writes some garbage value.
I dont know where im doing wrong.
Assigning values to struct:
sLbl= new SGraphLbl;
sTagName = (CString)czTagGetVal;
int pos = sTagName.Find("\n");
sName = sTagName.Left(pos-1);
if(sName.Right(1) == "Y")
{
sTagName = sName.Left(sName.GetLength()-2);
sTagName.TrimLeft();
sTagName.TrimRight();
sLbl->sTagName = sTagName;
sLbl->LblNo = Cnt;
sLbl->iTagInd = Cnt;
sLbl->PageNo = iPage;
}
LblList[iPage].AddTail(sLbl);
I am writing in to file in a seperate function
void Listtofile()
{
CFile gpFile;
if (!gpFile.Open( sFileName,CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox( sFileName + (CString)" - File Write Error");
return;
}
for(int iPage =0; iPage<NoPages; iPage++)
{
POSITION hPos = LblList[iPage].GetHeadPosition();
while(hPos)
{
SGraphLbl *Pd = (SGraphLbl *)LblList[iPage].GetNext(hPos);
gpFile.Write(Pd,sizeof( struct SGraphLbl));
}
}
gpFile.Close();
}
It writes some thing if file and also i cannot read the file also.
Anu
|
|
|
|
|
I don't know if this solves your problem, but this code may fail:
sTagName = (CString)czTagGetVal;
int pos = sTagName.Find("\n");
sName = sTagName.Left(pos-1);
pos is -1 when the string did not contain a line feed. If it contains multiple line feeds, all charaters at and right of it are removed. You are using a CString. So this may be better (removes also carriage returns):
sName.Remove('\n');
sName.Remove('\r');
|
|
|
|
|
Anu_Bala wrote: gpFile.Write(Pd,sizeof( struct SGraphLbl));
Since your struct contains a reference to a CString object, the above line is not the right way to serialize it (you're just writing the address of the CString to the file, while yout should write its content).
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,
I am using eclipse IDE with MinGw installed. I copied all the libxl C libraries into the C:\MinGw\include but when I try to compile the program, I get the below errors :
D:\Faez\Software & Download\ExcelFilePgm\Debug/../MyFirstExcelFile.c:14: undefined reference to `xlCreateBookCA'
D:\Faez\Software & Download\ExcelFilePgm\Debug/../MyFirstExcelFile.c:17: undefined reference to `xlBookAddSheetA'
D:\Faez\Software & Download\ExcelFilePgm\Debug/../MyFirstExcelFile.c:20: undefined reference to `xlSheetWriteStrA'
D:\Faez\Software & Download\ExcelFilePgm\Debug/../MyFirstExcelFile.c:21: undefined reference to `xlSheetWriteNumA'
D:\Faez\Software & Download\ExcelFilePgm\Debug/../MyFirstExcelFile.c:23: undefined reference to `xlBookSaveA'
D:\Faez\Software & Download\ExcelFilePgm\Debug/../MyFirstExcelFile.c:24: undefined reference to `xlBookReleaseA'
collect2: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 515 ms.
Here is the program I am trying to compile:
#include <stdio.h>
#include <libxl.h>int main()
{
BookHandle book = xlCreateBook(); // xlCreateXMLBook()
if(book)
{
SheetHandle sheet = xlBookAddSheet(book, L"Sheet1", 0);
if(sheet)
{
xlSheetWriteStr(sheet, 2, 1, L"Hello, World !", NULL);
xlSheetWriteNum(sheet, 3, 1, 1000, NULL);
}
xlBookSave(book, L"example.xls");
xlBookRelease(book);
}
return 0;
}
Thanks,
Faez
|
|
|
|
|
Where did you copy the .lib files, and have you added that location to your LIB environment variable or project settings?
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
I have copied the libxl.lib file to the the path C:\MinGW\lib
Also, I set the LIB environment varible to the same path as above
Alternately I tried adding the Library path in the project under Library tab
But all in vain.
|
|
|
|
|
You must add the LibXL libraries to your project so that they can be linked. How to do this depends on your project management. If it uses a make file, they must be added there.
|
|
|
|
|
Can you tell me the procedure of eiditing the make file respectivelive please..
I have copied the libxl.lib file to the the path C:\MinGW\lib
Also, I set the LIB environment varible to the same path as above
Alternately I tried adding the Library path in the project under Library tab
But all in vain.
|
|
|
|
|
I don't use the Eclipse / MinGW combination. If you have a make file, you may post it here provided it contains only a few lines (otherwise post just the relevant lines containing 'LIB' and the final build/link command).
Copying the library to a specfic path and adding that path to the LIB environment variable is the correct way. But you must also add the library file name to your project. With Linux make files, this can be done using LDLIBS = -llibxl -l<other-lib> .
|
|
|
|
|
Any idea why error says "undefined reference to `xlCreateBookCA' " when I am calling the xlCreateBook() function..?
|
|
|
|
|
Faez Shingeri wrote: Any idea why error says "undefined reference to `xlCreateBookCA' " when I am calling the xlCreateBook() function..?
Yes. It is because the linker ld (see at end of output from your initial question) did not find the function xlCreateBookCA in any of your source files or the specified libraries.
Where and how did you add the library name to your project make file? Note that the library names must be specified without the .lib extension.
|
|
|
|
|
THANKS A ZILLION Jochen....!
It worked like a charm.... I was giving the .lib extension...
ur AMAZING...! u made my day..
Thanks again
|
|
|
|
|
Hi,
Could you tell me how to use a variable declared in a function, which is in another file..
Example:
There is a function named as below whose declaration is present in a header file named "SheetW.h"
const wchar_t* xlSheetReadStr(SheetHandle handle, int row, int col, FormatHandle* format);
Now, how do I use the "row" variable in my main file..?
I tried
1)extern int row; //did not work....
2)extern "C" func-name(); //this too did not work..
Thanks,
Faez
|
|
|
|
|
row is not a variable, it is a parameter of the function, that must be passed. In the above function, it specifies the row number of the cell which content should be read. You will typically pass a local variable (e.g. when retrieving data from within a loop), or pass a fixed number like '1'.
|
|
|
|
|
Hi,
Is there a way by which I can add a ".txt" extension to a filename that I have recieved from a a variable as below..?
const wchar_t* s = xlSheetReadStr(sheet, firstRow+1, 5, NULL);
's' contains a value say "ABC"... I gotta rename it to ABC.txt.... to perform file operations on that file (ABC.txt)..
Thanks,
Faez
|
|
|
|
|
You must create a copy of the string and append the extension. There are several ways to do this:
wchar_t lpszFileName[_MAX_PATH];
wcscpy(lpszFileName, s);
wcscat(lpszFileName, L".txt");
swprintf(lpszFileName, _MAX_PATH, L"%s.txt", s);
std::wstring wstr(s);
wstr += L".txt";
CStringW strFileName;
strFileName.Format(L"%s.txt", s);
This question shows me that you are an absolute beginner to C/C++. This is not a problem. We all were beginners once. But I recommend not to start with a rather complex program using an external library to read Excel files. You should get a good book or tutorial for C++ beginners and work trough it before writing such programs.
|
|
|
|
|
I am really a beginner to C programming Jochen...
I really gotta sitback and build my basics first... Any suggestions for this C beginner..?
BTW... when I tried using the above suggested wchar functions, the code crashes and I get an error saying "An unhandled Win32 exception occured "......
|
|
|
|
|
There a many books and online tutorials, but I don't know which are best for beginners. See here [^] for some books and here [^] for an online tutorial (also available as PDF). If English is not your first language, you may look for tutorials in your native language. Just search for "C++ beginners tutorial".
You should pick only one of the functions (the swprintf example requires the wchar_t lpszFileName variable). A possible error may be a buffer overflow when your file name is longer than _MAX_PATH. To avoid buffer size problems, use std::string or CString .
|
|
|
|
|
I was unable to use any of the above functionality because I didn't have the <wcstr.h> header file in my MinGW.
What i did was, I copied the the acquired const string value into a file and then read it again by storing it in a new variable as below
char* dclColEle[10];
After getting such four column values, I am not able to individually access the dclColEle[0], dclColEle[1], dclColEle[3] values... i get junk or no values when i try to access them..
|
|
|
|
|
Faez Shingeri wrote: I was unable to use any of the above functionality because I didn't have the <wcstr.h> header file in my MinGW.
When using MinGW, use strcpy() and strcat() , or snprintf() . Use PATH_MAX instead of _MAX_PATH . Required include files are stdio.h, stdlib.h, and string.h.
Faez Shingeri wrote: char* dclColEle[10];
This creates an array with 10 elements where each element is a pointer to char. I assume, that this is definitely not what you want.
|
|
|
|
|