|
yes, "command line parameters"
-Dy
|
|
|
|
|
Technically there is a difference between parameters and arguments. Most folks use them interchangeably, and thus can lead to confusion.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
How do you call this what I want?
arguments or parameters?
|
|
|
|
|
void foo( int x )
{
}
void main( int argc, char *argv )
{
foo(123);
} if this program were started at a command prompt like myprog.exe -excavator, the argument would be -excavator.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
You can also access __argc and __argv in windoze applications both with and without MFC. Just include stdlib.h.
I recommend checking the source code for CCommandLineInfo for more enlightenment on this issue.
|
|
|
|
|
you need to do this from the source code, not from the command line ( or if that's the case, juste copy paste the arguments )
from the a simple C or C++ source code :
int main ( int argc, char* argv[] )<br />
{<br />
}
from a MFC application :
BOOL YouApp::InitInstance()<br />
{<br />
CCommandLineInfo cmdLineInfo;<br />
}
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
You can access __argc and __argv in Win32 applications also. This is what MFC does in CCommandLineInfo and why I rarely use it myself. You end up peeling the args back apart so I see little point to it.
BTW - if you don't believe me then check the MFC source code.
|
|
|
|
|
Are you wanting to know within testfile.exe what parameters were passed to it, or are you wanting to know from some other application what parameters were passed to testfile.exe? There is a big difference.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
FOR EXAMPLE: This testfile.exe is normaly running in fullscreen. But it has parameters wich can be used to run it in a small windows size.
The problem is: How do you get those parameters?
|
|
|
|
|
oh, you are wanting what are the arguments that a program can have/use, no ?
I think that for normal DOS type programs, you can do somthing like
cmd.exe /? which will list the available arguments.
maybe some program will have the following format :
someprogram.exe -h
or
someprogram.exe --help
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
Its a Win32 program. So, is it possible to get arguments through VC++ or something?
|
|
|
|
|
-Dy has answered this particular question.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
cmdInfo.m_strFileName now contains the commandline.
|
|
|
|
|
rwilmink wrote:
cmdInfo.m_strFileName now contains the commandline.
Only in specific instances (i.e., if the shell command is New or DDE). If you specified an argument that was not recognized by CCommandLineInfo , it would not show up in any of the member variables.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
Thank you very much for your suggestions.
Could you tell me your theory how you think it should be done?
|
|
|
|
|
As was mentioned here, -Dy has already answered your question for both MFC and non-MFC. What else are you looking for?
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
|
Hello,
i need to show a modal CDialog called from a CFormView. This view has a .NET control in it than when double clicked raise a C++ event function in an helper class that try to open the modal dialog. My problem is that the dialog is shown but after that is freezed, i cant modifity data or move it. That strange thing is that putting a simple MessageBox in any position of the OnInitDialog function the dialog works perfectly. I've tried to remove all the controls in the dialog but no progress. If i open the dialog from a function in the View it has no problem. If i call the function from the control event function it doesnt works. So i've tried also to send a message to the view and open the dialog from there but it doesnt work.
What kind of problem is this?
Thank you
|
|
|
|
|
You mentioned you tried sending a message...did you try posting instead? e.g., in the double-click handler for your control, use PostMessage to post a message to your view class. In the PostMessage handler you can raise the C++ event function you mention.
|
|
|
|
|
Hi all,
I have a modeless property sheet with three pages.
The pages are deleted in PostNCDestroy.
However, when a page has not been opened when the sheet is closed, PostNCDestroy for that page is not called, causing memory leaks.
How do I solve this?
Ronald
|
|
|
|
|
rwilmink wrote:
...causing memory leaks.
Where? If the page has not been created, it will not have allocated any memory. Is the leak in the property sheet?
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
The pages are first created on the heap and then added to the sheet (sheet->AddPage(pPage)).
I delete the sheet and the pages with 'delete this' in PostNCDestroy.
When a page has not been openened (by clicking the tab) PostNCDestroy is not called so the page is not deleted from the heap.
|
|
|
|
|
rwilmink wrote:
The pages are first created on the heap...
Why? Can you not just use something like:
class MySheet : CPropertySheet
{
CMyPage page1;
CMyPage page2;
CMyPage page3;
};
MySheet::MySheet()
{
AddPage(&page1);
AddPage(&page1);
AddPage(&page1);
} No heap and no memory allocation/cleanup to mess with.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
No, I can't, all kinds of problems with cyclic includes.
|
|
|
|
|
Ok, then if the property sheet is allocating memory for the pages, it should also free up that memory. Something like:
class MySheet : public CPropertySheet
{
MyPage *page1;
MyPage *page2;
MyPage *page3;
};
MySheet::MySheet()
{
page1 = new MyPage;
AddPage(page1);
page2 = new MyPage;
AddPage(page2);
page3 = new MyPage;
AddPage(page3);
}
MySheet::~MySheet()
{
delete page1;
delete page2;
delete page3;
}
BOOL MySheet::OnCommand( WPARAM wParam, LPARAM lParam )
{
WORD wNotifyCode,
wId;
wId = LOWORD(wParam);
wNotifyCode = HIWORD(wParam);
if (BN_CLICKED == wNotifyCode)
{
if (IDOK == wId)
{
if (! ProcOk())
return TRUE;
}
}
return CPropertySheet::OnCommand(wParam, lParam);
}
BOOL MySheet::ProcOk( void )
{
if (::IsWindow(page1->m_hWnd))
{
if (! page1->OnKillActive())
return FALSE;
}
if (::IsWindow(page1->m_hWnd))
page1->OnOK();
return TRUE;
}
void MyPage::OnOK()
{
CPropertyPage::OnOK();
}
BOOL MyPage::OnKillActive()
{
return CPropertyPage::OnKillActive();
}
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|