|
support.microsoft.com/kb/311765
My blogs:
http://blog.joycode.com/jiangsheng
http://blog.csdn.net/jiangsheng
http://bloglines.com/public/jiangsheng
Command what is yours
Conquer what is not
---Kane
|
|
|
|
|
Hi,
Thanks for the link to the article. It was very helpful, and I now have a chart in my dialog. However, I can't seem to figure out how to put my data into the chart, and select an XY Scatter chart...Any info or code snippets would be really appreciated!!
Thanks again!!
Jen
|
|
|
|
|
Hi! Is there any way I can call a function taking a variable number of arguments without specifying a terminating value? For example, I have this function:
int sum( int a, ... );
that calculates the sum of a variable number of positive arguments and takes as a final argument the value -1.
If I want to get 1 + 2 + 3, I would do something like this:
sum( 1, 2, 3, -1 );
What I would like to do is call this function without having to specify the fourth argument, -1, which tells the function to stop parsing the variable number of arguments and adding them. Is there any possible way to accomplish this? Thanks in advance!
|
|
|
|
|
void va_start(<br />
va_list arg_ptr,<br />
prev_param
);
My blogs:
http://blog.joycode.com/jiangsheng
http://blog.csdn.net/jiangsheng
http://bloglines.com/public/jiangsheng
Command what is yours
Conquer what is not
---Kane
|
|
|
|
|
I know I have to use the va_start, va_arg and va_end macros defined in stdarg.h in order to manipulate the arguments of such a function. But what I don't know is how I can call that function without a terminating value, like this:
sum( 1, 2, 3 );
Instead of:
sum( 1, 2, 3, -1 );
I want to make the function sum( ) "know" when to stop adding its arguments without giving it a terminating negative value argument.
Thanks!
|
|
|
|
|
No, you have to supply some sort of method identifying the number of parameters. va_arg() is a macro that simply advances the pointer to your parameters, it has no way of knowing if the data it is pointing at is valid or not.
You may be right
I may be crazy
-- Billy Joel --
Within you lies the power for good - Use it!
|
|
|
|
|
I am tring to convert a set of values to absolute.
I have the following .
0.0
-0.0125
0.123
-0.476
-2
4
I am using abs(x). For abs(-2) i have 2 which is ok. But for abs(-0.0125) i have 0.0000 and also for abs(0.123) and abs(-0.476) i have 0.000. Why is this?
I need to have abs(-0.0125) = 0.0125. How can i do this?
|
|
|
|
|
You can use the function fabs to compute floating point absolute values. The abs function is for working with integers, which explains why your floating point values were being truncated.
Good luck
Chris Richardson
|
|
|
|
|
For converting the floating values, use fabs() instead of abs() which takes a integer as a argument.
|
|
|
|
|
I have the C source code for a file conversion utility that I want to incorporate into my project.
Ideally, I want to be able to convert this into a .lib to add to my project.
I'm not sure how to go about this. Specifically I'm not sure if there is way to deal with main ()or how to convert that into a c++ library.
I'm thinking of possibly trying to convert the code into c++ and create some classes to clean it all up, but thought I'd post first to see if anyone has any suggestions or thoughts on this.
Or could I just create a header to interface with the existing C code? And maybe change the main () to some other function that is declared in this header?
Thanks for any help.
|
|
|
|
|
Hi! I have created a .dll module called errorHandlers.dll. If I want to use the functions contained by that module, I have to load the dll. For this, I use delayed loading. What I would like to ask you is why must I link errorHandlers.lib to my dll user application too? Doesn't errorHandlers.dll contain all the functions definitions it needs? And the second question I have is: Why doesn't the dll file size modify, if I change some of its functions code? For example, first, my dll has 294.622 KB. After I change the code of one of the functions it contains, the dll file size remains the same: 294.622 KB. But if I use the new dll, the changes in my application actually take place. Can anyone tell me why this happens (what happens)? Thanks in advance!
|
|
|
|
|
1. Linking allows the linker to resolve the locations for the function addresses into the DLL that your program is calling. Otherwise, you need to 'manually' load your DLL - using LoadLibrary and get addresses of functions at runtime using GetProcAddress.
2. Yes, the DLL contains the function definitions.
3. The DLL size increments in blocks of code. You can usually add or remove a few lines of code at times from a module and its image size will not change.
People that start writing code immediately are programmers (or hackers), people that ask questions first are Software Engineers - Graham Shanks
|
|
|
|
|
Now that I've got youir atttention I would like to ask you a question
So I want to enumerate the processes using NtQuerySystemInformation() native api.
I load it from ntdll.dll
i use the process structure below unlike the one documented by microsoft. but i've seen that others use it too.
typedef struct _SYSTEM_PROCESS_INFORMATION
{
DWORD dNext;
DWORD dThreadCount;
DWORD dReserved01;
DWORD dReserved02;
DWORD dReserved03;
DWORD dReserved04;
DWORD dReserved05;
DWORD dReserved06;
QWORD qCreateTime;
QWORD qUserTime;
QWORD qKernelTime;
UNICODE_STRING usName;
DWORD BasePriority;
DWORD dUniqueProcessId;
DWORD dInheritedFromUniqueProcessId;
DWORD dHandleCount;
DWORD dReserved07;
DWORD dReserved08;
VM_COUNTERS VmCounters;
DWORD dCommitCharge;
SYSTEM_THREAD Threads[1];
} SYSTEM_PROCESS_INFORMATION;
the thing is that when I call it I don't get any error code or null pointers but the structure's members are zeros.
the dNext member is not zero but I can't obtain the next pointer for another system_process_information because i get the invalid pointer error when I try this:
if (ProcessInfo->dNext!=0)
ProcessInfo=(SYSTEM_PROCESS_INFORMATION_DEF *)((ULONG *)ProcessInfo+ProcessInfo->dNext);
And I have another question.
How much space should I allocate for the ProcessInfo structure
i only allocate for one structure
SYSTEM_PROCESS_INFORMATION *ProcessInfo=(SYSTEM_PROCESS_INFORMATION *)malloc(sizeof(SYSTEM_PROCESS_INFORMATION));
or I shouldn't allocate at all. I will obtain a pointer to the structure anyway ?
here is the code I use:
HMODULE ntHinst;
ntHinst=LoadLibraryA(NTDLL);
if (ntHinst==NULL)
{
MessageBoxA(GetDesktopWindow(),"Error loading ntdll\nThe program will now end","ERROR",MB_ICONSTOP);
return 0;
}
_NtQuerySystemInformation=(NTQUERYSYSTEMINFORMATION)GetProcAddress(ntHinst,"NtQuerySystemInformation");
if(!_NtQuerySystemInformation)
{
MessageBoxA(GetDesktopWindow(),"Error obtaining function pointer\nThe program will now terminate","ERROR",MB_ICONSTOP);
return 0;
}
SYSTEM_PROCESS_INFORMATION *ProcessInfo=(SYSTEM_PROCESS_INFORMATION *)malloc(sizeof(SYSTEM_PROCESS_INFORMATION);
if (IsBadReadPtr(ProcessInfo,sizeof(SYSTEM_PROCESS_INFORMATION))||IsBadWritePtr(ProcessInfo,sizeof(SYSTEM_PROCESS_INFORMATION)))
return 0;
_NtQuerySystemInformation(SystemProcessInformation ,(PVOID)ProcessInfo,sizeof(SYSTEM_PROCESS_INFORMATION),&ret);
if (ret==0)
{
MessageBoxA(GetDesktopWindow(),"Function Call Failed: NtQuerySystemInformation\nThe program will now terminate","ERROR",MB_ICONSTOP);
return 0;
}
if(ProcessInfo==NULL)
{
MessageBoxA(GetDesktopWindow(),"Function Call Failed: NtQuerySystemInformation\nThe program will now terminate","ERROR",MB_ICONSTOP);
return 0;
}
while(ProcessInfo!=NULL)
{
//RtlUnicodeStringToOemString(usname,&ProcessInfo->usName,TRUE);
//MessageBoxA(0,usname->Buffer,"",MB_OK);
//RtlFreeOemString(usname);
HANDLE hProc;
hProc=OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessInfo->dUniqueProcessId);
if (hProc!=NULL)
{
HMODULE hmods[300];
DWORD retv;
char fname[1024];
EnumProcessModules(hProc,hmods,sizeof(hmods),&retv);
retv=retv/sizeof(DWORD);
GetModuleFileNameA(*hmods,fname,sizeof(fname));
MessageBoxA(GetDesktopWindow(),fname,"Process Name",MB_OK);
}
else if (ProcessInfo->dNext!=0)
ProcessInfo=(SYSTEM_PROCESS_INFORMATION_DEF *)((ULONG *)ProcessInfo+ProcessInfo->dNext);
else
ProcessInfo=NULL;
if (ProcessInfo->dNext!=0)
ProcessInfo=(SYSTEM_PROCESS_INFORMATION_DEF *)((ULONG *)ProcessInfo+ProcessInfo->dNext);
else
ProcessInfo=NULL;
}
free(ProcessInfo);
So I get no errors durin calling. but I also get a structure full of zero's.
What is the pb ?
And another thing. Can I use NtQueryDirectoryFile in user mode or this function is only for kernel mode only ?
gabby
|
|
|
|
|
I would like to use the new ribbon which will be introduced in Office 2007 in one of my apps.
But so far i have only found the DotNetBar (http://www.devcomponents.com/dotnetbar/[^]). I would like to avoid the usage of .NET and the context tabs are also not on the caption bar in DotNetBar. Is there any MFC implementation of the ribbon yet?
Maybe others would like to work on a free implementation for Codeproject?
André
|
|
|
|
|
ABuenger wrote: I would like to use the new ribbon which will be introduced in Office 2007 in one of my apps.
ABuenger wrote: Maybe others would like to work on a free implementation for Codeproject?
Sounds like a great idea, why don't you go for it?
You may be right
I may be crazy
-- Billy Joel --
Within you lies the power for good - Use it!
|
|
|
|
|
PJ Arends wrote: Sounds like a great idea, why don't you go for it?
I would participate, but I don't think that I have the time to do it alone.
Anyone else would like to work on a free Ribbon implementation?
André
|
|
|
|
|
I've found that there are three types of data that applications are principally concerned with: per-user (roaming), per-user per-machine (non-roaming), and per-machine (non-roaming). There are three different file system locations for these types of data, namely: Application Data, Local Settings\Application Data, and Program Files, respectively.
However, there seems to only be registry locations for the first and third (HKCU and HKLM, respectively). Anyone aware of a good way to store data in the registry that should be per-user per-machine?
I'm considering creating a folder in the Local Settings\Application Data folder with a GUID for it's name, and then storing that same GUID in the registry under HKCU. This would require my app to enumerate all these GUIDs (assuming the user roams to many different machines) looking for one with a corresponding existing folder. Any thoughts?
|
|
|
|
|
Why not just store the data in a file in the Local Settings area?
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
That would work for all the settings but one: the application path. I would need that path to get to the settings file.
|
|
|
|
|
I'm not sure I follow what you mean...
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
on vc6 it's working; now trying to set it up in VS.net 2003 it does not work.
I have some header file external to my project ( from 3rd party vendor ).
c:\external\include\library_1\includes\<some header files>
c:\external\include\library_2\includes\<some more header files>
c:\external\include\library_3\includes\<some other header files>
...
I include all the header files in the StdAfx.h file :
#include "library_1\includes/hA.h"<br />
#include "library_1\includes/hB.h"<br />
#include "library_1\includes/hC.h"<br />
#include "library_1\includes/hD.h"<br />
#include "library_2\includes/h1.h"<br />
#include "library_2\includes/h2.h"<br />
#include "library_2\includes/h3.h"<br />
...
Header hA.h includes a header in library_2 h1.h like :
#include "h1.h"
In VC6, in the project settings, I set the path to
c:usr\local\include\,
c:usr\local\include\library_1\includes\,
c:usr\local\include\library_2\includes\
this seems to be working.
But when I import this into my vs.net 2003 project, the path are not recognized.
Any ideas where I need to set the path to library_2 and library_1 ?
I don't want to have to change the header files, but if I have to, I will do it.
Thanks.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
First off, I am brand spankin new to "The Code Project". I am writing in C++
using the API's for various things. Currently my biggest problems are as
follows:
1) I created a GUI with 4 gauges, 4 bargraphs and a chart. There
seems to be some sort of memory leakage(ie. GDI objects just keep climbing until it crashes.) I can't find the culprit. All objects are being deleted after use.
2) I am using COM ports to communicate with some machinery and I am trying to
find a way to verify which port is connected.
Any advice would be greatly appreciated.
|
|
|
|
|
Gr8Shag wrote: All objects are being deleted after use.
Well, obviously not
It's hard to give advice without seeing any code.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Well, the code is rather large but if that is protocol, I'll paste it or
whatever I need to do.
Just post it here???
-- modified at 14:28 Monday 6th March, 2006
Well, as for the Memory leak - it appears that my partner found it. You guys
are amazing. One post and the problem is solved.
TY
|
|
|
|
|
Gr8Shag wrote: You guys
are amazing. One post and the problem is solved
Christian has that effect on things. He eats a maple syrup covered bagel waves his magic wand and all GDI resources are cleaned up.
Chris Meech
I am Canadian. [heard in a local bar]
When I want privacy, I'll close the bathroom door. [Stan Shannon]
BAD DAY FOR: Friendly competition, as Ford Motor Co. declared the employee parking lot at its truck plant in Dearborn, Mich., off limits to vehicles built by rival companies. Workers have to drive a Ford to work, or park across the street. [CNNMoney.com]
Nice sig! [Tim Deveaux on Matt Newman's sig with a quote from me]
|
|
|
|