|
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
|
|
|
|
|
thanks again for your help forgot the WS_VISIBLE flag on the CRichEditCtrl::Create
another issue the TCP/IP registry setting per the MS Knoweledbase article got my sockets to connect the MainFrame
Thanks Again
|
|
|
|
|
ForNow wrote: myedit = new CProgedit; // allocate the richedit
CRect myrect(17,39,735,273);
myedit->SetOptions(ECOOP_OR, ECO_AUTOVSCROLL | ECO_AUTOHSCROLL); Why make the rich edit control on the heap? Put it on the stack like any other control variable. Way simpler.
ForNow wrote: CDialog::OnInitDialog(); Any particular reason why this statement is (second to) last instead of first?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
modified 29-May-13 15:21pm.
|
|
|
|
|
Why make the dialog on the heap. I'm doing inter process communication with a console program
And I am afraid that if create the dialog on the
Stack some of the information will get lost
As I want the dialog active durning the time I am
Communicating with the console program
When I put CDialog::Initinstnce as the first statement
In my overridable control never came back from it
|
|
|
|
|
ForNow wrote: When I put CDialog::Initinstnce as the first statement You mean OnInitDialog() ?
ForNow wrote: In my overridable control never came back from it Did you remember to call AfxInitRichEdit() in the app's InitInstance() method()?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
In my CWinApp yes I am at work but ill
Check
Right now my main problem is the TCP/IP code that used to
Work ( connecting with the mainframe stopped working)
I am getting nErrorcode timeout in CAsyncSocket::OnConnect
Overridable
Maybe my laptop has slowed up and I may have re-install windows
To get back the performance
Thanks
|
|
|
|
|
Hi,
I implemented a wheel-zoom function. It behaves exactly as I expect on primary monitor. But when I move application to secondary monitor, the wheel zoom behavior is different.
How can correct it?
Thanks,
transoft
|
|
|
|