|
Thank you Jose. it worked. A very pratical solution.
|
|
|
|
|
I have a file (d://*.txt)
require :
1.My app(exe) can read ,write ,delete ,update this file;
2.user(you or me) can't write ,update ,delete this file,but he can read this file.
can you give me advise please?
thanks
|
|
|
|
|
Open the file in read-only mode, and keep it open. That way no one can write to, or delete the file.
When you need to write to it, or update it or delete it, close the file handle, then do whatever you want with it.
Have fun.
this is this.
|
|
|
|
|
won't work anymore when closing the application
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
Can use a service for that instead of a program.
this is this.
|
|
|
|
|
not a good method.
there's no need to use memory and processor ressources...
NTFS provides rights on the file system, which allow you to set who can and who cannot access the file/directory, and how wide is the authorization for one on that file...
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
I don't know if it is possible to set access rights for individual programs in NTFS ("not different users"). Like: one program can read modify/delete a file while another cannot?
Maybe you can link to the right source.
this is this.
|
|
|
|
|
To expand on toxcct's suggestion. Deny all access to the file except for one user (a user that is not used by any person). Then in your program, impersonate that user before trying to update the file. See CreateProcessWithLogonW() . Make sense?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
I called setBKColor in on draw function but nothing happend, why?
how to use setBKColor function and how to change the background color of the view. any one knows please tell me. thanx a lot.
|
|
|
|
|
Either use:
OnDraw()
{
CRect rect;
GetClientRect(&rect);
pDC->FillSolidRect(&rect,RGB(255,0,0));
}
OR:
Handle the OnEraseBkGnd():
{
CRect rect;
GetClientRect(&rect);
pDC->FillSolidRect(&rect,RGB(255,0,0));
return TRUE;
}
this is this.
|
|
|
|
|
why the function setBKColor doen't work?
how and where share i use this function.
thanx a lot.
|
|
|
|
|
The following code is one of the ways... You would have to read the GDI to understand by SetBkColor won't work (you have to define a context first b4 u use it)
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect); //Obtain the height/width of the window
CBrush brush = CBrush (RGB (0, 0, 255)); //Create a blue color brush
CBrush *pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(0, 0, rect.Width(), rect.Height()); //Fill the client area with the blue rect
dc.SelectObject(pOldBrush); //restore old brush
}
(http://www.dvrshark.com)
Umer Mansoor
|
|
|
|
|
I have a Visual C++ Front-end application accessing a MsAccess databases backend via ODBC.
The app uses CRecordset MFC classes to access the db tables.
After upsizing to SQLServer, the process of opening the database and recordsets takes 75seconds as compared with 0.5seconds in Access! I am amazed, and figure something fundamental is wrong.
I use open type of CRecordSet::snaphot in the CRecordset::Open calls. If I use dynaset instead of snapshot it speeds things up a lot, but then I get problems down the line, fundamentally because I don't think the ODBC driver supports dynasets.
I have added clustered index to the primary key of every table in SQL, and this goes a small way to improving performance but not much.
I still think I have missed something fundamental - I am a newbie to SQLServer so go easy!
Many thanks for any help.
Mark
|
|
|
|
|
We used to have SQL server script code run from a VC project accessing the SQL server through ODBC. That was slower than dripping molasses in a New Hampshire winter.
I switched over to using the ADO classes here on CodeProject and what used to take two hours to run took about 35 seconds.
Do what it takes to lose the ODBC and change to the ADO, you probably won't regret the performance improvement.
|
|
|
|
|
Blake,
Thanks for the reply. I actually started looking into the possibility of ADORecordsets yesterday, so this confirms it would be a wise move, thanks.
I assume I can use these classes in VC++ (as opposed to having to move to .NET) in place of my CRecordsets (obviously with a bit of tweaking throught the code), but in a similar way?
|
|
|
|
|
|
http://img194.imageshack.us/img194/1737/hwnd8ry.jpg
i am trying to post a message to my windowless app
i tried
<br />
PostMessage( theApp.GetMainWnd()->m_hWnd , WM_MAKE_TIME_STOP_DLG, (WPARAM)broken_msg_obj.parm2, 0);<br />
<br />
PostMessage( theApp.m_hThread , WM_MAKE_TIME_STOP_DLG, (WPARAM)broken_msg_obj.parm2, 0);<br />
<br />
PostMessage( hwnd , WM_MAKE_TIME_STOP_DLG, (WPARAM)broken_msg_obj.parm2, 0);<br />
<br />
PostMessage( m_pMainWnd->GetSafeHwnd() , WM_MAKE_TIME_STOP_DLG, (WPARAM)broken_msg_obj.parm2, 0);<br />
<br />
PostMessage( GetParent(0) , WM_MAKE_TIME_STOP_DLG, (WPARAM)broken_msg_obj.parm2, 0);<br />
<br />
PostMessage(this->m_pMainWnd->m_hWnd, WM_MAKE_TIME_STOP_DLG, (WPARAM)broken_msg_obj.parm2, 0);[/CODE]<br />
<br />
but they all either give compile error or dont work<br />
<br />
<br />
my initinstance of the app<br />
[CODE]<br />
BOOL CAsevApp::InitInstance()<br />
{<br />
CDialog dlg;<br />
m_pMainWnd = &dlg;<br />
return TRUE;<br />
}
please asssist :wave:
|
|
|
|
|
awah wrote:
CDialog dlg;
m_pMainWnd = &dlg;
I guess the window is not even being created yet.
You are posting messages to the window which does not exist.
You need to call at least DoModal() or call the dialog's Create() function.
this is this.
|
|
|
|
|
strtok,strcpy,crashes when garbage strings are handled
this is especially so in winsock applications
in my application, i expect " value1^value2^value^&############"
and use strtok to extract value 1,2 and 3
and "&" indicates that there are no more values to be collected
where #### = garbaage
others can send a garbage long string like
"##################################"
and my application would crash
is there anyway to tell strtok/strcpy to handle this?
will a check on strlen help?
more info on my function
struct broken_msg<br />
{<br />
void break_msg(char* full_msg)<br />
{<br />
char seps[] = "^";<br />
char *token;<br />
token = strtok( full_msg, seps ); <== CRASHES HERE<br />
if(strlen(token) < 150)<br />
{<br />
strcpy(parm0,token);<br />
}<br />
<br />
if( stricmp("&" ,token ) )<br />
{<br />
token = strtok( NULL, seps );<br />
if(strlen(token) < 150)<br />
{<br />
strcpy(parm1,token);<br />
}<br />
}<br />
if( stricmp("&" ,token ) )<br />
{<br />
token = strtok( NULL, seps );<br />
if(strlen(token) < 150)<br />
{<br />
strcpy(parm2,token);<br />
}<br />
<br />
}<br />
if( stricmp("&" ,token ) )<br />
{<br />
token = strtok( NULL, seps ); <br />
if(strlen(token) < 150)<br />
{<br />
strcpy(parm3,token);<br />
}<br />
<br />
}<br />
}<br />
<br />
<br />
char parm0[150];<br />
char parm1[150];<br />
char parm2[150];<br />
char parm3[150];<br />
};
|
|
|
|
|
You can set a maximum length for the received string like:
char* full_msg;
full_msg[200] = 0; // set the limit to 200 chars.
I hope it will do the thing.
this is this.
|
|
|
|
|
awah wrote:
where #### = garbaage
others can send a garbage long string like
"##################################"
and my application would crash
Search the incoming string for & before attempting to parse it. Or copy the string up to & into another string and parse it instead.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
1) Make sure token is not NULL after each call to strtok(), or you'll get a runtime error or garbage. While it is generating garbage, it is also corrupting data; which should make the system scream (runtime error), but some times it doesn't.
2) Simplify a little bit by using if( '&' == *token ), that will produce faster code and makes more since.
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
Here is code sample for 2 same sized arrays A and B correlation in mmx:
float f_x2temp[4],f_y2temp[4],f_valtemp[4];
float m_zero=0.0f;
float f_x,f_y, f_x2=0.0f,f_y2=0.0f, f_val=0.0f;
__m128 *mA, *mB;
__m128 meanA,meanB, m_x,m_y, m_x2,m_y2, m_val;
m_val = _mm_load_ss(&m_zero);
m_x2 = _mm_load_ss(&m_zero);
m_y2 = _mm_load_ss(&m_zero);
meanA = _mm_load_ps1(&A->m_mean);
meanB = _mm_load_ps1(&B->m_mean);
for(int j=0; j<a->m_height; j++)
{
mA = (__m128 *)&A->m_rdata[j][0];
mB = (__m128 *)&B->m_rdata[j][0];
for(int i=0; i<a->m_width/4; i++)
{
m_x = _mm_sub_ps(*mA++,meanA);
m_y = _mm_sub_ps(*mB++,meanB);
m_val = _mm_add_ps(m_val, _mm_mul_ps(m_x,m_y));
m_x2 = _mm_add_ps(m_x2, _mm_mul_ps(m_x,m_x));
m_y2 = _mm_add_ps(m_y2, _mm_mul_ps(m_y,m_y));
}
}
but after first iteration of this instruction "m_x = _mm_sub_ps(*mA++,meanA);"
I get "Unhandled exception at 0x0041ff76 in myapp.exe: 0xC0000096: Privileged instruction." in "m_y = _mm_sub_ps(*mB++,meanB);" instruction what's wrong? Its not a memory failure access exception everything ok with A and B data buffers
9ine
|
|
|
|
|
interesting it works well with this mod.
for(int j=0; j<a->m_height; j++)
{
for(int i=0; i<a->m_width/4; i++)
{
m_x = _mm_sub_ps(_mm_loadu_ps(&A->m_rdata[j][i*4]), meanA);
m_y = _mm_sub_ps(_mm_loadu_ps(&B->m_rdata[j][i*4]), meanB);
m_val = _mm_add_ps(m_val, _mm_mul_ps(m_x,m_y));
m_x2 = _mm_add_ps(m_x2, _mm_mul_ps(m_x,m_x));
m_y2 = _mm_add_ps(m_y2, _mm_mul_ps(m_y,m_y));
}
}
9ine
|
|
|
|
|
Is it possible to replace tab buttons in the tab control by a bitmap?
|
|
|
|
|