|
I have Cstring a. If button1 is pressed a="1". If button1 is pressed again a=a+"1". Now i want this a to be converted into integer or double.
Thanks
|
|
|
|
|
_ttoi[^], _ttof[^]?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
for:
CString a="111"
double x=_ttoi[a] doesn't work..
1 thing more..
How to delete decimals and dot for decimals for double x with string.format(...,x)?
|
|
|
|
|
Aljaz111 wrote: CString a="111"
double x=_ttoi[a] doesn't work..
Function call syntax helps...this code (note - it's _tstof, not _ttof - MSDN is a little ambiguous here)
{
CString a("11");
const int i = _ttoi(a);
const double d = _tstof(a);
std::cout << i << std::endl;
std::cout << d << std::endl;
}
{
CString a("11.5");
const int i = _ttoi(a);
const double d = _tstof(a);
std::cout << i << std::endl;
std::cout << d << std::endl;
}
produces this
11
11
11
11.5
Aljaz111 wrote: How to delete decimals and dot for decimals for double x with string.format(...,x)?
Sorry, don't know what you mean.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Lets say you have double x= 5.0000... how to delete decimals so outcome would be double x=5 without .0000??
|
|
|
|
|
Do you mean when you use CString::Format ? I'd do it like this:
CString a;
double d = 5.0000;
a.Format("%d", (int)d);
i.e. cast it to an int and treat as an int.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
// DLL10.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "DLL10.h"
static HHOOK hHook = NULL;
static HINSTANCE hInst;
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hInst = hModule;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// This is an example of an exported variable
DLL10_API int nDLL10=0;
// This is an example of an exported function.
DLL10_API int fnDLL10(void)
{
return 42;
}
// This is the constructor of a class that has been exported.
// see DLL10.h for the class definition
CDLL10::CDLL10()
{
return;
}
int getNumber()
{
return 1;
}
This is my DLL file, and When I load the file, DLLMain is not called?
|
|
|
|
|
How have you verified that DllMain isn't called?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Possibly he didn't hear the call...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I set printf() in DllMain, but didn't show the result
and I set break point int DllMain.
|
|
|
|
|
ernst20020530 wrote: I set printf() in DllMain, but didn't show the result
Not a surprise
ernst20020530 wrote: I set break point int DllMain.
I presume you had a separate executable to run that referenced that DLL?
When I did that with your DLL code, I was able to break in the DllMain. I used this as the code for my executable:
int _tmain(int argc, _TCHAR* argv[])
{
LoadLibrary(_T("dll-name"));
return 0;
}
where dll-name is the name of the DLL I built.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi there,
I was wondering if there is any standard way to detect which version of Windows SDK is installed using macros. SDK 6.1 defines some function signatures a bit differently than the Platform SDK that ships with VC++ 2005. If there is such a trick, I was thinking of using the new function signature for the newer SDKs while still letting the the people without the windows sdk 6.1 compile. Or, is there a better way to handle this situation? Thanks in advance.
--
Regards,
- Tareq
|
|
|
|
|
tareqsiraj wrote: SDK 6.1 defines some function signatures a bit differently than the Platform SDK that ships with VC++ 2005
You mean the extra bits on parameters, like in this definition of CoInitializeEx ?
WINOLEAPI CoInitializeEx(__in_opt LPVOID pvReserved, __in DWORD dwCoInit);
They don't make any difference to the compiler - they're just macros that expand to nothing unless you're using Prefast[^].
Just #include things and don't worry about them.
tareqsiraj wrote: If there is such a trick, I was thinking of using the new function signature for the newer SDKs while still letting the the people without the windows sdk 6.1 compile
Not entirely sure what you mean there - as I said, just use the SDK headers and don't worry about what version they are unless they're too old for the version of Windows you're targeting and don't contain the functions you need.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Umm... thats not what I meant. For example, the dbghelp.h that ships with VS2005's PSDK uses PSTR for the first param of PENUMLOADED_MODULES_CALLBACK64 while the dbghelp.h that ships with SDK6.1 uses PCSTR. Now, I want both who does and doesn't have SDK6.1 to be able to compile the app. Hopefully this makes things a bit clear.
--
Regards,
-Tareq
|
|
|
|
|
Ah, right - hadn't noticed that before. Not quite as obvious as all the __in things on function parameters
Now, looking at the SDK headers (v6.0A), they use the macro CONST to add const-ness to SDK parameter specs.
So, you could do something like:
#include <Windows.h>
#ifndef CONST
#define CONST
#endif
and then use CONST instead of const ?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thanks for spending some time on this... unfortunately, the PSDK that comes with VC++2005 does the same with CONST. So it will have the same effect regardless of SDK6.0+.
-Tareq
|
|
|
|
|
Hello,
I use the following to detect the version of Platform SDK/Windows SDK.
#include "ntverp.h"
#if !defined(VER_PRODUCTBUILD) || VER_PRODUCTBUILD < 3790
#pragma message ("********************************************"
#pragma message ("Error: You need the latest Microsoft Platform SDK to compile this project.")
#pragma message ("********************************************"
#endif
There are other constants defined in the header which may be of use to you. I believe my preprocessor directives above simply check that VER_PRODUCTBUILD is at minimum Platform SDK for Microsoft Windows Server 2003. There is another constant VER_PRODUCTBUILD_QFE which I *think* can determine patches and service packs.
Best Wishes,
-David Delaune
|
|
|
|
|
ah... just what I was looking for. Thanks .
-Tareq
|
|
|
|
|
I don't like how, in a Windows environment, upon resetting the focus on a minimized window or having the window perform some other complex operation, the thread may stall (temporarily hang, not translating any messages). What if I want to break these operations?
Isn't it possible to spawn a new thread at initialization that either:
1)Solely searches the message queue for WM_QUIT and sets a global flag when triggered. Somehow, before performing any resource and time intensive operations (that might cause a small hang), any function calls check for the flag and break if it is present.
2)Or maybe have the entire message pump in the new thread, as a busy program isn't even able to receive messages while performing operations.
I think the biggest problems would be:
1)Having a separate thread pump messages from the parent
2)Figuring out how to break operations when the WM_QUIT flag (which was set in another thread) is set
Any input, tips, thoughts, examples that might help me?
Thanks, The Scientist.
|
|
|
|
|
It's a good idea - but you've got the conclusion backwards. You put the busy work in a different thread, leave the main (UI) thread alone. Look up worker threads[^].
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I'm a little new to multi-threading.
Isn't there an issue regarding threads and access to process-wide variables/data?
Will I be able to kill a thread, while its in the middle of doing some kind of processing, from the main thread? And can I change the flag's status (if quit is posted after I initialize the new thread)?
|
|
|
|
|
TheScientistIsDead wrote: Isn't there an issue regarding threads and access to process-wide variables/data
Oh yeah - you've got to be very careful. The general rule is that you read things like ints (i.e. 4 bytes or less) without synchronisation, but everything else needs to be synchronised, really.
TheScientistIsDead wrote: Will I be able to kill a thread, while its in the middle of doing some kind of processing, from the main thread?
There is TerminateThread[^], but its use is discouraged.
TheScientistIsDead wrote: And can I change the flag's status (if quit is posted after I initialize the new thread)
Yes. In your WM_QUIT handler, I'd do something like this:
InterlockedExchange(&lQuit, 1);
::WaitForSingleObject(hThread, INFINITE);
and in the worker thread function:
if (lQuit) ExitThread(0);
if (lQuit) ExitThread(0);
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
TheScientistIsDead wrote: I'm a little new to multi-threading.
Then you should read this[^].
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Hello. I am trying to set a REG_MULTI_SZ value. I got 2 values which should be sat. Here is my code:
DWORD dwSize = ((strlen(valueA) + strlen(valueB)) + 3);
PBYTE fValue = (BYTE *)malloc(dwSize * sizeof(DWORD));
memset(fValue , 0, dwSize);
memcpy(fValue , valueA, strlen(valueA) + 1);
memcpy(fValue + strlen(valueA) + 1, valueB, strlen(valueB) + 1);
RegSetValueEx(hk, TEXT("SomeKey"), 0, REG_MULTI_SZ, (LPBYTE) fValue ,(DWORD) dwSize);
<pre>
This code works perfect on windows xp, but crashes on Vista. Actually, it crashes each third time i run my app, but what for sure, it does not set my value at all. (It sets value and returns STATUS_SUCCESS only in one case - if i run my app in context of visual studio debugger - after compilation, i click -> Debug-> Start Debugging). Now, after it's crash i click debug and it points me to malloc.c, at this part:
<pre>
void * __cdecl _malloc_base (size_t size){
void *res = NULL;
// validate size
if (size <= _HEAP_MAXREQ) {
for ( ;; ) {
// allocate memory block
res = _heap_alloc(size); // <-- here
Exactly the same scenario, like above, appears with usage of RtlAllocateHeap:
PBYTE fValue = (BYTE *)RtlAllocateHeap(NtGetProcessHeap(),HEAP_ZERO_MEMORY,dwSize * sizeof(DWORD));
And my question is, does anyone know why or ever encountered such issue? Thanks in advance.
|
|
|
|
|
Are you doing a UNICODE build?
csrss wrote: PBYTE fValue = (BYTE *)malloc(dwSize * sizeof(DWORD));
What is the purpose of sizeof(DWORD) ?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|