|
// Create your var
char *pBuf = new char[4096];
// Copy the contents into it
// Null term at the end
// do what ever you need...
// Make sure you delete it after your done
delete[] pBuf;
|
|
|
|
|
char c1[1000000]; // Message Text
// load api
BOOL freeResult, runTimeLinkSuccess = FALSE;
HINSTANCE dllHandle = NULL;
BounceCheckType BounceCheckPtr = NULL;
dllHandle = LoadLibrary("api.dll");
//Get pointer to api function using GetProcAddress:
BounceCheckPtr = (BounceCheckType)GetProcAddress(dllHandle,"BBBOUNCECHECK");
// Open directory for read
CFileInfoArray fia;
fia.AddDir(
m_spoolpath,
"*.*",
TRUE,
CFileInfoArray::AP_SORTBYNAME | CFileInfoArray::AP_SORTASCENDING,
FALSE
);
/// here will start the directory iteration
for (int ji=0;ji
|
|
|
|
|
Use ftell to get the file size and then allocate a buffer on the fly.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
You are allocating char on the stack which is probably not large enough for your use. Use dynamic allocation to allocate space from the heap (memory).
<br />
char *c1 = new char[10000000];
And as the person above said, make sure to free the space you allocated using a delete.
- Anatari
|
|
|
|
|
thanks, that seems as tho I will be able to hold enough info in 10MB of space, but now changing that variable to a pointer affects my file reading section. the fread( )function call doesnt put the file contents into c1 like it used too.
like i said b4 , im not a c++ guru, so in advance, sorry for any of my hardheadedness on this.
Im just hacking away at this because my co. needs it.
|
|
|
|
|
Anonymous wrote:
I initialized char to 1000000 , but thats as big as i can get, my file is bigger than that.
You should ditch all of this C file stuff and use iostreams and a std::string. You can read my articles on iostream for more info, basically you can read a file of any length into a string, then get the string as a const char * using the string.c_str() function.
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
During last 10 years, with invention of VB and similar programming environments, every ill-educated moron became able to develop software. - Alex E. - 12-Sept-2002
|
|
|
|
|
Either you or the API is mistaken. I suspect what
has happened is that you are misreading the API
and rather than taking a char it takes a char*,
but that is only a guess, it is hard to determine
without seeing it.
If that is the case you need to read the file
into a malloced (or new-ed) block of memory,
and pass that block to the API:
char * block;
CFile file;
file.Open("filename.txt", CFile::modeRead);
size_t size = file.GetFileSize();
block = new char[size];
file.Read(block, size);
file.Close();
API_FUNCTION(block); // Call your API function here
delete[] block;
Is roughly correct off the top of my head
(I could have got some of the parameters wrong
or the function names wrong.)
However, if something like that doesn't work
you'll have to tell us more about the API before
we can help you.
|
|
|
|
|
I get fade out getting variable of one dailog from another dialog.
I had tried.
inside the main dlg..
<br />
void maindlg::GetVariable()<br />
{<br />
firstDlg firstdlg;<br />
firstdlg.DoModal();<br />
CString num = fristdlg.Getnumber();
<br />
secondDlg secdlg;<br />
secdlg.Setnumber(num);<br />
secdlg.DoModal();<br />
}<br />
|
|
|
|
|
The Getnumber() function returns a CString vaule righ? If it does that should work..
|
|
|
|
|
Uff... Well, I guess GetNumber extracts the value directly from the control it is stored in, right? If so, this fails because by the time DoModal completes, the dialog window is destroyed, only the the CDialog hull persists.
The standard method to get data after DoModal ing is by attaching member variables to the controls you're interested in. Class Wizard lets you do that very easily (look around its tabs). Have also a look at CDialog::UpdateData .
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
yes.. GetNumbr() return CString. but the error is there.
here all the functions that I called.
mainDlg call both dlg1 and dlg2.
<br />
void mainDlg::ShowDlg1()<br />
{<br />
dlg2 d2;<br />
d2.DoModal();
CString number = d2.GetNumber();
<br />
dlg1 d1;<br />
d1.SetTableNumber(number);
d1.DoModal();
}<br />
dlg2 take input number(CString) from user.. it is very simple dialog. it has OK button and one EDIT BOX for the user to enter the number .
when the user click OK button, the input number will be stored
<br />
CString dlg2::GetNumber()<br />
{<br />
return inputNumber;<br />
} <br />
CString dlg2::OnOk()<br />
{<br />
inputNumber = m_inputNumber; <br />
CDialog::OK();<br />
}<br />
<br />
dlg1 take that number first. then when dialog is asked to display then display the input number on the dialog.
<br />
void dlg1::SetTableNumber(CString num)<br />
{<br />
m_tablenumber = num;<br />
}<br />
BOOL dlg1::OnInitDialog()<br />
{<br />
CDialog::OnInitDialog();<br />
.<br />
.<br />
.<br />
GetDlgItem(IDC_NUMBER)->SetWindowText(m_tablenumber);<br />
return 0;<br />
<br />
}<br />
<br />
|
|
|
|
|
Ummm... Looks weird. If you try debugging the app, where exactly the error shows up? On exiting from d2.DoModal() ? Upon entering d2.GetNumber() ? Inside that method?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
It was return number in d2.GetNumber().
now I got no bug anymore.. I put UpdateData(FALSE) in OnOK() then it work.. still i don't know why though.
I have 2 CString member variable in dlg2 class. one is IDC_NUMBER ( edit box to accept the input number ) variable and the other regular CString just to store back the input number.
As you see how i did in dlg2::ONOK().
why do I have to call UpdateData(FALSE) to get rid of the bug eventhough GetNumber() is not returning IDC_NUMBER CString variable but regular CString variable member of the dlg2 class???
|
|
|
|
|
Hi everyone. I got a little issue , and I'd like to see what kind
of suggestions you all have to help me solve it
Ok, first some background info.
The project im building is in C++. It uses a Third-Party API.
Basically, its neccesary for me to read in the contents of a file, and pass the entire contents of this file into the 3rd parties API function.
Now , heres where the problem arises.
The API expects to recieve the file contents as a Char variable, but sometimes the file size I need to pass is bigger than a char variable can hold!
Somehow I need to get the entire contents of my file into the api as a char value, just not sure how im going to go about doing this.....
Any suggestions / workarounds , etc. would be greatly appreciated!
Thanks,
Josh
|
|
|
|
|
|
Hi Gang,
I was just wondering if somebody has a vc example of a multiview single document program? What I want to do is to have two different types of views represent the same document class. One view might be a bunch of items, like a map coordinate system, and the other view might actually have a tree view of the addresses of the houses. The document is the list of houses itself with something like names, addresses, (coordinate system to display them with).
Thanks,
Nick
|
|
|
|
|
I am Microsoft Speech 5.1 (SAPI) and I am having a problem. For some reason LoadCmdFromResource is failing. I have the .cfg as a resource in a folder "SRGRAMMAR" and I am pretty sure all my parameters are correct but why is it failing?
hr = CmdGrammar->LoadCmdFromResource(
NULL,
MAKEINTRESOURCEW(IDR_QCDGRAMMAR),
L"SRGRAMMAR",
MAKELANGID( LANG_NEUTRAL, SUBLANG_NEUTRAL), SPLO_STATIC);
if ( FAILED( hr ) ) //Leave application
{
DestroyWindow(hVoice);
CoUninitialize();
return FALSE;
}
|
|
|
|
|
I'm puzzled: FuelGauge is a CIndicator object.
I had:
class CIndicator
{
private:
double mMaxLimit;
double mCurValue;
double mMinLimit;
public:
CIndicator(double MaxLimit = 100.0,
double startValue = 0.0,
double MinLimit = 0.0);
~CIndicator();
CIndicator (const CIndicator& ind);
void Display (CString s) const;
double SetValue (double value);
double GetValue () const;
BOOL IncreaseBy(double value = 1.0);
BOOL DecreaseBy(double value = 1.0);
};
sizeof( FuelGauge) turns out to be 24.
When I added a virtual in front of the function Display(), I got sizeof = 32! Its due to the Vtable I understand, but how do I find out the size of the address of the VTable? Do all addresses have the same size? Its looks like its 8, but why is that? Does the address size depend on the kind of object thats being stored there? If so, what kind of object is the VTable object?
Appreciate your help,
ns
|
|
|
|
|
First off, you really shouldn't care about the vtable since it can change from implementation to implementation.
Now, for the information you requested.
A VTable is just a pointer to an array of function pointers. In MSVC, this pointer is at the start of the structure or class. It will be 4 bytes wide. The reason that your structure is 32 bytes in size is that doubles are naturally aligned and thus must be on an 8 byte boundary. This means that 4 bytes of padding after the vtable is required to align the first double. Thus, 3 * 8 + 4(vtable) + 4(pad) = 32
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
Thanks. Experimenting to understand this padding concept I added an int to my class. Now sizeof is 40! So its
3*8 + 4 (int) + 4 (pad) + 4(vtable) + 4(pad)?
Cant test this out easily, but what if I'd had all ints in my class, and no doubles. would I still be doing the 8 byte boundary (I cant check it out because if I change all the doubles to ints, the program wont compile.) Would I get sizeof as 40 again?
Trying to undersatnd the 8 byte boundary concept.
Appreciate your help,
ns
|
|
|
|
|
Ints only require 4 byte alignment. So everything will look as expected without any extra padding.
HOWEVER, if you follow and int by a double, there is a good chance the double will have to have padding added before it. The same is true if an int is at the end of a structure that contains doubles. The end of the structure is padded to help make sure that an array of that structure is properly aligned.
Look up "Natural alignment" on google. VC uses natural alignment up to the double.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
VTs are automatically included by the compiler into the object code. Usually, one should not be concerned about the size or the locations of (pointers to) VTs, and in fact messing with them can only be done through non-standard casts.
Objecs have as many VT pointers as virtual classes they are derived from, roughly speaking. If you still are curious about implementation of these things in VC++, please tell me, I found once a very good article on VC++ object layout (but I don't recall where it was right now).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
The article I'm reading just wanted to explain why virtual functions work...doesnt say to mess with the VTable. They said the structure gets additional info because the VTables address gets added in. So rest assured, I dont plan to mess with it , just trying to see how the magic of virtual functions happens..
Appreciate your help,
ns
|
|
|
|
|
I found the article: C++: Under the Hood[^] (courtesy of Nemanja Trifunovic).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
THat looks really informative
Appreciate your help,
ns
|
|
|
|