|
|
Some suggestions:
1. Take your meds
2. Stop spamming
3. Check your local hardware store, they know everything there is to know about nails
|
|
|
|
|
I got some sounds from network(about 5 remote stations),I wanna to mix them with directsound.
now ,I only get the WAVEFORMATEX .How do I play mix and play?
notes:
There are some CWavefile examples in the directsound sdk,but all are
mixing wavefile on the harddisk.
|
|
|
|
|
You can use an individual secondary buffer to play each of the streams.
DirectSound will mix them all (to the primary buffer) for you.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
hi,Thank u .
There is a failure when it CreateSoundBuffer.
My App use many wave*** apis for catch speech .maybe they conflict each other.
Am I right?
|
|
|
|
|
doudou-shen wrote: There is a failure when it CreateSoundBuffer
What's the error code? What does the code look like? Have you
properly initialized the buffer descriptor?
I don't know of any conflicts with Windows multimedia APIs, nor
have I experienced any.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello,
I have come across few applications which use MS FlexGrid written in MFC. Can someone tell me what the function SetTextArray(column, "string") does? If it sets the text in a column, don't we need to specify the row there?
I have searched for tutorials and could not find anything helpful. So please suggest a good tutorial which explains what the functions are used for...
The problems that exist in the world today cannot be solved by the level of thinking that created them.
- Albert Einstein
|
|
|
|
|
i dont think you can get any doucment for the flexgrid.
But regarding SetTextArray(arg1,arg2),
arg1 is the cell number and arg2 is the data that u want to display.
Cell numbering starts from the topleft corner and ends with bottom right corner.Like 0 1 2 3
4 5 6 7
8 9 10 11
Hope this answer helps you,
Sunil.
|
|
|
|
|
Thanks for the reply.
The problems that exist in the world today cannot be solved by the level of thinking that created them.
- Albert Einstein
|
|
|
|
|
|
Hemang,
I have the same problem as you - additionall I'd like to run flash content in a local HTML file... have you found any way of doing it?
Any pointers would be appreciated!
Kind regards!
|
|
|
|
|
I am getting an ASSERT error with the following code:
#if !defined ID_CONVERTTOTCHAR
#define ID_CONVERTTOTCHAR "%s"
#endif
void CSystemDB::FileSaveSys(CString str)
{
m_csFileName.Format(_T(ID_CONVERTTOTCHAR),str);
// open a file
CStdioFile myFile;
if(!myFile.Open(m_csFileName, /*CFile::modeNoTruncate | */CFile::modeCreate | CFile::typeText))
{
AfxMessageBox((_T("Unable to open file")),MB_OK,0);
}
ULONGLONG len = myFile.GetLength();
DWORD dw = GetLastError();// error_path_not_found (3)
In "Debug" mode m_csFileName shows the correct filename and path. yet myFile remains with all "00000".
I have no idea why? Can anyone else see why?
A C++ programming language novice, but striving to learn
|
|
|
|
|
You stated you get an assertion but you don't say where or why
Your error handling is incorrect for the CStdioFile::Open() call.
GetLastError() is used after Windows API calls, and only if a call indicated
an error occurred. You can't just use it anywhere (although in this case you probably
got lucky and the path-not-found error was correct).
If you want to see the error, you should be using the 3rd paramater to the call,
which is a CFileExceptiion *...
void CSystemDB::FileSaveSys(CString str)
{
m_csFileName.Format(_T(ID_CONVERTTOTCHAR),str);
CStdioFile myFile;
CFileException ex;
if(!myFile.Open(m_csFileName, CFile::modeCreate | CFile::typeText, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
AfxMessageBox(szError, MB_OK, 0);
return;
}
ULONGLONG len = myFile.GetLength();
I imagine the assertion occurs on the myFile.GetLength() line because
you're making a call on a file that isn't successfully opened. You need
to adjust the logic so if Open() fails, you don't continue trying to use
the file.
Also look at the docs for Open() - you're not using the documented required
open mode flags ("One access permission and one share option are required").
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I discovered the error(except for the errors you mentioned. "m_csFileName" is also a CString and CStdioFile requires a TCHAR evidently. When I changed it to TCHAR it wrote the file! Is there a way to copy a CString into a TCHAR? I really need to do that, because I build the path the User has chosen from a lot of Editboxes which I get using a CString; hence my need to be able to copy the gathered data in the CString into a TCHAR. Do you know how to do that?
A C++ programming language novice, but striving to learn
I made the changes you suggesed and I hardcoded the path and it created the file but it didn't write anything into the file even though "str" was loaded here:
void CSystemDB::FileSaveSys(CString str)
{
m_csFileName.Format(ID_CONVERTTOTCHAR,str);
// open a file
CStdioFile myFile;
CFileException ex;
if(!myFile.Open(pszFileName, CFile::modeNoTruncate | CFile::modeCreate | CFile::typeText, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
AfxMessageBox(szError, MB_OK, 0);
return;
}
ULONGLONG len = myFile.GetLength();
DWORD dw = GetLastError();// error_path_not_found (3)
if(dw == 0 || dw == 183)
{
// File exists so setup to add to it with this batch:
//myFile.Seek( len +1, CFile::begin );
}
for(m_vSys.m_ITFileStr = m_vSys.m_vFileStr.begin() ; m_vSys.m_ITFileStr != vSys.m_vFileStr.end(); m_vSys.m_ITFileStr++)
{
// First get CSysData from vector:
str = *m_vSys.m_ITFileStr;
myFile.WriteString(str);// was loaded in Debug
}
myFile.Close();
the error returned is "Disk Full" yet nothing is written in the file! and I have over 65 GB of disk space. What gives?
<div class="ForumMod">modified on Sunday, May 4, 2008 10:12 AM</div>
|
|
|
|
|
A CString is a class which wraps an array of TCHARs, so no conversion is necessary.
You can pass a CString object anywhere a const TCHAR * (LPCTSTR) is required.
You should be able to debug this easily - it's not very many lines of code to step through.
I would guess your pathname was being built incorrectly the first time.
You still have a call to GetLastError() in there, which is wrong. GetLastError()
is only to be used after function calls that are documented to actually set the system
internal last error code. The way you are using GetLastError(), you have no idea what
function last set the error.
Step through this with the debugger ... you should easily be able to see what's
working and what's not
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Here's code that works:
// Open the file with the specified encoding pszFileName
FILE *fStream;
/* _T("w+") == _O_RDWR | _O_CREAT | _O_TRUNC*/
errno_t e = _tfopen_s(&fStream,pszFileName, _T("a+"));
if(e != 0)
{
AfxMessageBox((_T("Unable to open file")),MB_OK,0);
return;// failed
}
CStdioFile myFile(fStream); // open the file from this stream
ULONGLONG len = myFile.GetLength();
for(m_vSys.m_ITFileStr = m_vSys.m_vFileStr.begin() ; m_vSys.m_ITFileStr != m_vSys.m_vFileStr.end(); m_vSys.m_ITFileStr++)
{
// First get CSysData from vector:
str = *m_vSys.m_ITFileStr;
myFile.WriteString(str);
}
str = "";
myFile.Close();
}
Now I've tried your code and it fails on my machine. The above code works but I don't like it. When I try to use this code it doesn't work:
CStdioFile myFile;
CFileException ex;
if(!myFile.Open(pszFileName, CFile::modeNoTruncate | CFile::modeCreate | CFile::typeText, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
AfxMessageBox(szError, MB_OK, 0);
return;
}
ULONGLONG len = myFile.GetLength();
for(m_vSys.m_ITFileStr = m_vSys.m_vFileStr.begin() ; m_vSys.m_ITFileStr != m_vSys.m_vFileStr.end(); m_vSys.m_ITFileStr++)
{
// First get CSysData from vector:
str = *m_vSys.m_ITFileStr;
myFile.WriteString(str);
}
str = "";
myFile.Close();
pszFileName is a TCHAR and m_csFileName is a CString. using m_csFileName I got an ASSESS violation error. Using pszFileName it created the file but didn't write anything in it. and gave an error of "Disk is Full error". both examples used the same path as Debug showed. The working example(1st one) also uses the same path with no errors. I have no idea why this is so.
A C++ programming language novice, but striving to learn
|
|
|
|
|
Larry Mills Sr wrote:
pszFileName is a TCHAR and m_csFileName is a CString
Again, there should be no difference here unless you initialize/set
the CString with a different string than your TCHAR pointer points to.
You're getting hung up on the string type when it's probably either the
pathname or the Open() flags that are bad.
What about starting simple. Create/open a file you know is going to succeed.
Use the CFile::Open() method flags properly, get the file to create and/or open
and then worry about writing to it.
Try this (works great on this end)....note that I've used one access permission (CFile::modeReadWrite)
and one share option (CFile::shareDenyWrite), as the docs state I should:
CString m_csFileName("e:\\testastdiofile.txt"); <code>
CStdioFile myFile;
CFileException ex;
if(!myFile.Open(m_csFileName, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite | CFile::shareDenyWrite | CFile::typeText, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
AfxMessageBox(szError, MB_OK, 0);
return;
}
myFile.SeekToEnd(); <code>
myFile.WriteString(_T("A string\r\n"));
myFile.Close();
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Here's my code and the results:
void CSystemDB::FileSaveSys(CString str)
{
CString m_csFileName = ("c:\\Wells\\Program\\DataBases\\Operators\\WSF\\SystemDB.sdb"); //<--set this to an appropriate pathname!!
CStdioFile myFile;
CFileException ex;
if(!myFile.Open(m_csFileName, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite | CFile::shareDenyWrite | CFile::typeText, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
AfxMessageBox(szError, MB_OK, 0);
return;
}
myFile.SeekToEnd(); //<-- do this only if you want to append to an existing file!
myFile.WriteString(_T("A string\r\n"));
myFile.Close();
This is the error I received:
CString m_csFileName = ("c:\\Wells\\Program\\DataBases\\Operators\\WSF\\SystemDB.sdb"); //<--set this to an appropriate pathname!!
error C2440: 'initializing' : cannot convert from 'const char [54]' to 'ATL::CStringT<BaseType,StringTraits>'
1> with
[
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> ]
1> Constructor for class 'ATL::CStringT<BaseType,StringTraits>' is declared 'explicit'
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC<wchar_t>
1> }
Do you think maybe the switches are set wrong on the compiler? I'm afraid to mess with the compiler settings; but obviously, there is something wrong somewhere.
Mark, I know you are a highly trained programmer, that's obvious from the code of yours I've seen. Something is wrong and I don't know how to fix it.
A C++ programming language novice, but striving to learn
If you want, you can email me directly at: larryamillssr@hughes.net
|
|
|
|
|
Larry Mills Sr wrote: This is the error I received:
CString m_csFileName = ("c:\\Wells\\Program\\DataBases\\Operators\\WSF\\SystemDB.sdb"); //<--set this to an appropriate pathname!!
error C2440: 'initializing' : cannot convert from 'const char [54]' to 'ATL::CStringT<BaseType,StringTraits>'
Shouldn't you be wrapping that string literal with _T() or prefixing it with L ?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
David, Let me explain how the path is arrived at. The User selects certain options in a dialog; and upns the path is predetermined, hence the usage of a CString. The path will only be the same is the User makes the same selections. How am I to know what the User wants before he makes an selection? I can't, so I must be prepared to use his selections for the path. Belie ve me it's complicated when you are building a path according to selections made by a User. As you can see I can't do the _T("%s") rutine everytime, in advance. The data being gathered is for different wells and their locations(paths). I no nothing about what you mentioned as "L" or how to do it.
According to Mark CStrings are suppose to be the same as TCHAR's, but my compiler doesn't know that yet!
the code Mark compiled and ran on his machine and he didn't use the _T("%s") or the "L" why won't it on mine? is the question and evidently the resolution.
Of course I further edited it with the _T("%s") and it compiled and ran correctly. But I can't hardcode every path in the program!
A C++ programming language novice, but striving to learn
|
|
|
|
|
Larry Mills Sr wrote: According to Mark CStrings are suppose to be the same as TCHAR's...
What he said was that any place a const TCHAR* is expected, a CString can be used because it has a LPCTSTR() operator.
Larry Mills Sr wrote: ...the code Mark compiled and ran on his machine and he didn't use the _T("%s") or the "L" why won't it on mine?
Maybe his (test) project did not have UNICODE defined.
In any case, if you'll get into the habit of creating Unicode-aware code (e.g., _T() , _tcscpy() , TCHAR ), your code will work the same whether UNICODE is defined or not.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
|
Larry Mills Sr wrote: the code Mark compiled and ran on his machine and he didn't use the _T("%s") or the "L" why won't it on mine?
Because you changed the code I used the CString constructor that takes a const char *
as an argument. In a Unicode build, the passed char string is converted to a TCHAR
string (which is wchar_t in a Unicode build).
You changed the code to use an assignment operator. There isn't an CString assignment
operator that takes a const char *, so the code failed to compile.
Larry Mills Sr wrote: But I can't hardcode every path in the program
Of course. But now that you know the file open works with a proper pathname string, you
can work on building a pathname string in a CString. It should be easy to debug - if the
file Open() fails, then you built a bad pathname string
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Larry Mills Sr wrote: CString m_csFileName = ("c:\\Wells\\Program\\DataBases\\Operators\\WSF\\SystemDB.sdb");
There shouldn't be an '=' sign there (at least there wasn't in my code sample).
If you want to use the assignment like that, then as David suggested, you'll
need to assign an appropriate string type, which is a TCHAR:
CString m_csFileName = _T("c:\\Wells\\Program\\DataBases\\Operators\\WSF\\SystemDB.sdb");
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Oh, it's always the little things. Sorry to have bothered you Mark. I'm so used to using the assignment operator that I failed to notice you didn't. Sorry, and thanks a lot!
A C++ programming language novice, but striving to learn
|
|
|
|