|
thanks for reply eng.Jochen Arndt
in this example if i want to cut from 4th character to the kg position which can be dynamic
@) 1450kg @) 1450kg @) 1450kg
how can i get the position of kg
i use this
outPut =mess ; //////
//------------------
std::string str1 ;
str1=outPut ;
unsigned pos = str1.find("KG");
str1 = str1.substr (4,pos - 1);
CString cs(str1.c_str());
outPut=cs ;
strcpy(mess, outPut);
is this code is true
|
|
|
|
|
Still wrong. As I told you, indexes are zero-based. So you must use 3 as start index. To get the length, subtract the start position from the position of 'kg'. Also there is no need to mix CString and std::string :
CString cs(mess); int nStart = 3; int nStop = cs.Find("kg"); cs = cs.Mid(nStart, nEnd - nStart);
If you want to get numeric values from strings, use the atoi() function:
int nWeight = atoi(mess + 3);
The atoi() function will parse the string stopping at the first non-digit char and return the converted value.
|
|
|
|
|
i tryed this code
char mess[MAX_MESSAGE];
unsigned int lenBuff = MAX_MESSAGE;
unsigned long lenMessage;
static CString outPut;
CString cs(mess); // copy mess to CString object
int nStart = 3; // start at 4th character
int nStop = cs.Find("kg"); // get position of 'kg'
cs = cs.Mid(nStart, nStop - nStart);
//////--------------------------------------------
outPut=cs ;
strcpy(mess, outPut); /////
i finally put the outPut string in the mess character
is this code true
|
|
|
|
|
Again: Why did you use the std::string outPut object?
You can simply copy the extracted sub-string from the CString to mess.
Overall, I can't say if the code is 'true'. You must know what should be done. Check the extracted value using a debugger or printing it out. If it is what you want, you are finished. Otherwise change your code until you get what you want.
|
|
|
|
|
Hi,
I like to gather some coding guideline tools for C. More specific for integration into a CI system showing us some statistics of the code quality.
Can anyone post some suggestions, eventually with feedback or experience about the tool?
regards.
T.
|
|
|
|
|
topcatalpha wrote: More specific for integration into a CI system
What's a CI system ?
Anyway, coding guidelines are quite subjective, google for a few of them and pick whatever looks nice and applicable to your organization (or yourself).
For example, the IBM[^] one looks good.
Nihil obstat
|
|
|
|
|
CI = Continious Integration.
Well we reviewed some tools but it would be nice if we had some feedback from users who are actually using them.
thx,
K
|
|
|
|
|
Hi, i have the following problem:
I have a process which uses PlaySoundA[^] WINAPI function to play a specific sound (let's be it "c:\test.wav"). So the process has already loaded the needed "winmm.dll"
I want to play the same sound when the DLL is injected into the process, so the code looks like:
#define WINVER 0x600
#define _WIN32_WINDOWS 0x600
#define _WIN32_WINNT 0x600
#include <windows.h>
typedef bool __stdcall (*psfunc)(LPCTSTR pszSound, HMODULE hmod, DWORD fdwSound);
void play() {
psfunc ps;
HMODULE winmm = GetModuleHandle("winmm");;
ps = (psfunc)GetProcAddress(winmm, "PlaySoundA");
ps("c:\\test.wav", 0, SND_FILENAME | SND_ASYNC);
}
BOOL __stdcall DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
OutputDebugString("play before");
play();
OutputDebugString("play after");
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
The dll is injected correctly via CreateRemoteThread & LoadLibrary.
But the sound is never played and the dll is blocking at the call of
ps("c:\\test.wav", 0, SND_FILENAME | SND_ASYNC);
Trying to exit the process freezes too because of the blocking thread.
Why does it never return? Procss Monitor doesn't show any error.
How can I solve this?
|
|
|
|
|
|
Oh, I didn't see that.
So I called the function via CreateRemoteThread too and it's working. Thank you!
It would be nice to know what things are allowed/disallowed in DllMain .
|
|
|
|
|
Furblog Sidloth wrote: It would be nice to know what things are allowed/disallowed in DllMain . I agree, the documentation could be better. However, my understanding is that you should not do anything more than initialise the odd static variable or class, and save a handle to the DLL itself. Anything that takes you out of DllMain is not allowed and can lead to problems - as you already discovered.
Use the best guess
|
|
|
|
|
Not only that he has no error checking....
==============================
Nothing to say.
|
|
|
|
|
Seems to be fairly standard these days.
Use the best guess
|
|
|
|
|
Exception handling will clean up the crap.....
==============================
Nothing to say.
|
|
|
|
|
I sometimes wonder if some of the course being taught these days even mention error checking.
Use the best guess
|
|
|
|
|
Hi,
I am having a number of problems Getting my richedit to work with my Modless Dialog Box
it started with scrolling as I was unable to get the Current Line and then I while trying to debug it
I noticed the I was I using DDX to connect my crichedit class with the resource defined window
which the documentation says only works for modal however when I comment out the UpdateData
and used the CRichEdtCtrl::Create to connect my windows class to the resource window none the Streamed in data is displayed I'll display the code along with the resource statements
The Create of the modeless Dialog
ret = progdbg->Create(IDD_PROGDBG,(CWnd *)this);
BOOL CprogDebug::OnInitDialog()
{
int FirstVisible;
long start, end, theline;
myedit = new CProgedit; CRect myrect(17,39,735,273);
myedit->SetOptions(ECOOP_OR, ECO_AUTOVSCROLL | ECO_AUTOHSCROLL);
UpdateData(FALSE); EDITSTREAM es;
CStdioFile *fileptr = new CStdioFile;
fileptr->Open(proglisting,CFile::typeBinary);
es.dwCookie = (DWORD) fileptr;
es.dwError = 0;
es.pfnCallback = (EDITSTREAMCALLBACK) readlisting;
myedit->StreamIn(SF_TEXT, es);
myedit->SetFocus();
theline = myedit->LineFromChar(myedit->LineIndex(-1));
myedit->LineScroll(-theline,0);
myedit->HideSelection(TRUE,FALSE);
ShowWindow(SW_SHOW);
CDialog::OnInitDialog();
return TRUE;
}
IDD_PROGDBG DIALOGEX 0, 0, 779, 345
STYLE DS_SETFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Dialog"
MENU IDR_HERC_CMDTYPE
FONT 8, "Times New Roman", 400, 0, 0x0
BEGIN
CONTROL "",IDC_RICHEDIT22,"RichEdit20A",WS_CHILD | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE | WS_BORDER | WS_TABSTOP,17,39,735,273
END
void CprogDebug::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX,IDC_RICHEDIT22,(CWnd &)*myedit);
}
|
|
|
|
|
This is not the correct way to use a dialog; switch it to a modal type.
Use the best guess
|
|
|
|
|
meaning I can't use I cant use RichEdit with modeless
|
|
|
|
|
Why would you want to? It offers no advantages and just makes your code far more complex than it needs to be. Use dialogs the way they are meant to be used and your life will be so much easier.
Use the best guess
|
|
|
|
|
I want to have richedit with a window that I can move around mot modal with just a ok or cancel button
If modeless and richedit is out of the picture then maybe I should I should just use a regular child
window
|
|
|
|
|
ForNow wrote: I want to have richedit with a window that I can move around And why do you think a modal dialog cannot do that?
Use the best guess
|
|
|
|
|
Model as in Do.Modal are very inflexible
Used to gather data yes/no. I want to
Display a Mainframe assembler program listing
In a richedit manipulate the current selection
Have other controls/windows display
Register information can do all that with a
Modal
|
|
|
|
|
ForNow wrote: Model as in Do.Modal are very inflexible Quite the opposite; you can do (more or less) anything you like in a modal dialog. However, given the description of what you want to do, it may not be the best choice. The issues is to decide what features you wish to use and then work out which type of window you need. Perhaps a normal frame window would do what you want, but running in a separate thread. Or, go back to a modeless dialog, but accepting that you cannot use those features that are restricted to modals.
Use the best guess
|
|
|
|
|
So then I can use richedit with modeless when i do CRichedt::create the stream in callback gets control
But the data is not displayed in the CRichedit
|
|
|
|
|
ForNow wrote: But the data is not displayed in the CRichedit Then you need to investigate why, and add whatever code is necessary. Check out the documentation for the CRichedit class.
Use the best guess
|
|
|
|