|
Just wondering if there is any way to create a SDI type app inside of a SDI type app?
e.g. (you can create a dialog type app and create dialogs inside of it)..
I know the answer is probably no.. but I figured it doesn't hurt to ask.
|
|
|
|
|
The answer is probably no... But you can embed dialogs into other dialogs.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Yeah, thats what i figured.. I have 2 apps that are SDI, it would be nice to combine them into one app..
Right now the only way i can start the other app with some pre-defined vars is to do a ShellExec() with some params, that way when the second app starts it gets the command line switches and sets some of its vars etc....
It would be really nice if I could one app then create a instance of the new app and pass it vars before i use it..
O-well..
Thanks for the response..
|
|
|
|
|
ummmmm isnt that why they have mdi apps too?
"traffic lights are for people who can't make their own decisions" biz stuff about me
|
|
|
|
|
Yes, you can. I think you want to transfer control to another app
and wait for it to finish? Sure, use CreateProcess to launch the
other app, and disable the launching app until the other app has
completed. The handle you got from CreateProcess can be used in
the win32 wait functions.
This would be analagous to a dialog waiting for a another modal
dialog. It's just a bit more work. Is that what you were thinking
of?
|
|
|
|
|
hi all
what exactly are threads and what's their typical purpose in programming?
thanks for any info/tip/link
Jan
|
|
|
|
|
Process more than one thing at the same time in the same process.
Like downloading a file and playing a wav at the same time, or a server answering 10000 users at the same time.
lazy isn't my middle name.. its my first.. people just keep calling me Mel cause that's what they put on my drivers license. - Mel Feik
|
|
|
|
|
thank you I could catch the basic idea
and so, if i stay, say, at 'usual' simple mfc applications could i reasonably omit threads at all, or there are even 'simple' situations in which i could come across into threads stuff?
Jan
|
|
|
|
|
|
thank you MArc
i'll give it a try
Jan
|
|
|
|
|
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
|
|
|
|
|
Is it a char or a char * what the API expects?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
// 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???
|
|
|
|