|
Hello,
I was wondering if it was still needed to call ReleaseBuffer(); as after a GetBuffer(); call, if I call (LPTSTR)(LPCTSTR) before the parameter to pass...
As my english is not my best, I've thought of placing a sample:
method A
Arxiu.Write((LPTSTR)(LPCTSTR)cs, cs.GetLength());
method B
Arxiu.Write(cs.GetBuffer(cs.GetLength()),cs.GetLength());
cs.ReleaseBuffer(); Are the two of them right?
Thank you in advance.
|
|
|
|
|
The LPCTSTR operator on the CString returns a constant string - you should never cast it to non-const string to change it. So while the first example will compile, and possibly work (depending on what Arxiu.Write() does), it is bad practice, and could cause problems.
You only need to call ReleaseBuffer() after a call to GetBuffer() to tell the CString to take control over the buffer again (and allowing you to call other methods).
Dave
|
|
|
|
|
First, if Arxiu.Write is not going to modify the string, then it should be declared as a LPCTSTR and not LPTSTR. Then the problem just magically goes away.
However, if you have no control over how Arxiu.Write is defined AND you are 100% sure that it does not modify the buffer, then (LPTSTR)(LPCTSTR) is safe but bad style and risky. The only time I ever use that construct is when I am working with Windows API where some structures are dual purpose and thus can not be defined as const when they are being used in a read-only context. (i.e. SetItem for tree views)
Now, you will need to invoke ReleaseBuffer in method B.
Here is an excellet talk about string classes.
http://www.codeproject.com/string/cppstringguide2.asp?target=getbuffer[^]
(Mike doesn't agree with me on the (LPCTSTR) construct for VERY good reasons. One cut and paste into a situation where the buffer is written to will crash the problem.)
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
Thank you, the link has been very useful...
|
|
|
|
|
For some reason I can't find/use the ATL Object Wizard in MSVC6. The button to use it is disabled and its not under my Insert menu. I have the folder and all the files for the Object Wizard (C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template\ATL) but I cannot use it. Should I reinstall or is there a way to turn it on?
Thanks for any help.
|
|
|
|
|
Is it possible to combine multiple images into one and create animated image?
|
|
|
|
|
Yes.
What is your goal, to create an animated gif ? or a movie type file (AVI, MPEG, MOV, ... )
Max.
Maximilien Lincourt
For success one must aquire one's self
|
|
|
|
|
Which ever creates smallest file!
Actually I want to create a slide show type image by combining 10 full screen size images.
Thanks for you help.
|
|
|
|
|
|
I trying to sort a date string inside a combo box by date. ie "3/07/03 8:42:27 PM" whenever a new date is added to the combo box. I was looking at the compareitem function. Any ideas on how to do this the easiest way.
Thanks
|
|
|
|
|
No. The data is arbitrary, so one solution is to design your own algorithm.
Kuphryn
|
|
|
|
|
Anthony9887 wrote:
I was looking at the compareitem function
That's what you need to do. Ensure that you set owner-draw for the combo box and then write your own CompareItem() method.
Chris Meech
"what makes CP different is the people and sense of community, things people will only discover if they join up and join in." Christian Graus Nov 14, 2002.
"AAAAAAAAAHHHHHH!!!!! Those leaks are driving me crazy! How does one finds a memory leak in a garbage collected environment ??! Daniel Turini Nov. 2, 2002.
|
|
|
|
|
Hi!
first thanks to everyone who answered me about the database problem!
But... still
I'm lost!!! I looked in the MSDN about DAO or ADO or ODBC and i don't know which of them to use for my Win32 application (NOT MFC)...
Please tell me the reason about using any of them!
and if it could possible to tell me how to initialize everything about the database(I mean what to include (*.h) or import (*.dll)) and then how to open the database just to write in it and read from it without having placed any ActiveX database control(just some text controls and buttons required for write in and read from the database) on the application.....
Thanks alot!!!
|
|
|
|
|
DAO used to be great with small databases like access, not good for transaction and somewhat slow. I would not use it if I had a choose
ODBC -
pro
Is great unified db access model, depending on the driver/database access it could be as fast as native API.
cons
Very difficult interface + Microsoft seems to consider it to be outdated
OLEDB - from my experience not much different from ODBC, except for having COM
interfaces. If you only have to work with MS SQL Server it is probably the way to go. It has some MTS/COM+ support and some XML support. Again Microsoft seems too indicate it is going to go away with ADO.NET.
ADO - COM wrapper around ODBC/OLEDB (depends on the version). It is a bit slow, but interface is very simple. MTS/COM+ automatic support. some XML support.
ADO.NET - Highly recommended(marketed) by Microsoft. It has extensive XML support. I do not completely understand what the big deal is , it seems the same as old ADO. If you do .Net it is the only choose.
|
|
|
|
|
Thank you but can you tell me how to do it in Win32 SDK (no MFC)
for example using ODBC or ADO!
|
|
|
|
|
Look in MSDN and Platform SDK - they have bunch of examles.
|
|
|
|
|
Thank you but can you tell me how to do it in Win32 SDK (no MFC)
for example using ODBC or ADO! (I want to load an mdb file)
|
|
|
|
|
Hi,
I would like to know why calling the function 'MySHEnumFolderContent( "c:\",SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN,NULL, 0 )' multiple times, the number of pages currently resident in memory (memory usage) always grows up (I used the Windows XP Task Manager to measure the memory usage)?
Thanks,
Ana
int MySHEnumFolderContent( LPSHELLFOLDER pFolderPai,
LPITEMIDLIST pItem,
DWORD dwFlags,
FOLDERCONTENTPROC pfn /*= NULL*/,
LPARAM lParam /*= 0*/,
LPITEMIDLIST* ppidl /*= NULL*/ )
{
int NumItens = -1;
LPSHELLFOLDER pFolder = NULL;
HRESULT hr = pFolderPai->BindToObject( pItem, 0,
IID_IShellFolder,(LPVOID *)&pFolder );
if ( SUCCEEDED( hr ) )
{
LPENUMIDLIST pEnumIDList = NULL;
hr = pFolder->EnumObjects( NULL, dwFlags, &pEnumIDList );
if ( SUCCEEDED( hr ) )
{
LPMALLOC pMalloc = NULL;
LPITEMIDLIST pidl = NULL;
SHGetMalloc( &pMalloc );
NumItens = 0;
while ( pEnumIDList->Next( 1, &pidl, NULL ) == S_OK )
{
if ( pfn != NULL && !pfn( pFolder, pidl, lParam ) )
{
// Returns the current PIDL
if ( ppidl != NULL )
*ppidl = pidl;
break;
}
NumItens++;
pMalloc->Free( pidl );
pidl = NULL;
}
pMalloc->Release();
pEnumIDList->Release();
}
pFolder->Release();
}
return ( NumItens );
}
/*---------------------------------------------------------------------------*/
int MySHEnumFolderContent( LPCTSTR pNomeFolder,
DWORD dwFlags,
FOLDERCONTENTPROC pfn /*= NULL*/,
LPARAM lParam /*= 0*/,
LPITEMIDLIST* ppidl /*= NULL*/ )
{
int NumItens = -1;
LPSHELLFOLDER pDesktopFolder = NULL;
// Get an IShellFolder interface pointer
HRESULT hr = SHGetDesktopFolder( &pDesktopFolder );
if ( SUCCEEDED( hr ) )
{
LPITEMIDLIST pItem = NULL;
hr = MySHPathToPIDL( pNomeFolder, &pItem, pDesktopFolder );
if ( SUCCEEDED( hr ) )
{
LPMALLOC pMalloc = NULL;
NumItens = MySHEnumFolderContent( pDesktopFolder, pItem, dwFlags, pfn, lParam, ppidl );
SHGetMalloc( &pMalloc );
pMalloc->Free( pItem );
pMalloc->Release();
}
pDesktopFolder->Release();
}
return ( NumItens );
}
/*----------------------------------------------------------------------------*/
HRESULT MySHPathToPIDL( CString szPath, LPITEMIDLIST *ppidl,
LPSHELLFOLDER pFolder /*= NULL*/ )
{
HRESULT hr;
LPSHELLFOLDER pShellFolder = NULL;
OLECHAR wszPath[ MAX_PATH ] = { 0 };
ULONG nCharsParsed = 0;
BOOL bFreeOnExit = FALSE;
// Use the desktop's IShellFolder by default
if ( pFolder == NULL )
{
hr = SHGetDesktopFolder( &pShellFolder );
if ( FAILED( hr ) )
return ( hr );
bFreeOnExit = TRUE;
}
else
pShellFolder = pFolder;
if( szPath.Right( 1 ) == ':' )
szPath += "\\";
// Convert the path name to Unicode
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szPath, -1, wszPath, MAX_PATH );
// Call ParseDisplayName() to do the job
hr = pShellFolder->ParseDisplayName( NULL, NULL, wszPath,
&nCharsParsed, ppidl, NULL );
// Clean up
if ( bFreeOnExit )
pShellFolder->Release();
return hr;
}
|
|
|
|
|
hi,
im unable to cast an integer into either a VARIANT or _variant_t. Does anyone know how i can place an integer into a variant variable? (i need to do this so that i can place a _variant_t into a new field - ADO style)
Does anyone know how to do this?
|
|
|
|
|
try a long or short instead. _variant_t has a constructor that takes either of them.
in a VARIANT (v), set v.lVal to the integer value and v.vt to VT_I4
and try reading the documentation in future
HTH
--
Ian Darling
|
|
|
|
|
oops, thanks, that didnt even cross my mind (the long and short bits, i did read the documentation but was specifically looking for int) cheers
|
|
|
|
|
Hi:
As you know whenever you right-click on the Sound Files for example .MP3 files and click on "Properties" item
from
context menu,Windows extract some information about .MP3 file such as Title,Artist,Album,Year,Comment,Genre,...
and show them in the "Summary" property sheet. Now i want to know where do this information store?
I know that this info store in the portion of file called "Header",But Which offset ? In general how can i find this info
for any file? for example you know .MDB files(database in access),the name of it's fields,number of fields,.....where
do they store? is there any catalog or Webpage,URL,html help such as MSDN or...... to achieve this purpose?
Please help me.
my english isn't very well because it isn't my native language,Please excuse me for bad comments.
Thanks a lot.
|
|
|
|
|
Well, MP3 files store their information (title, track, etc) a bit different.
This is for the ID3V1 tag: http://home.swipnet.se/grd/mp3info/tag/index.html
And there's also a ID3V2 track which uses a "real" header, i.e. at the beginning of the file.
Files in generals may have all a different header, so it is hard to say what a header looks like and where it begins.
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Hi everyone,
I was wondering, is it possible to open a doc file by just using WIN32 APIs and not using any GUIs stuff.
Thanks in advance,
Ken
|
|
|
|
|
Sure - using the Office object model and COM.
Phil Boyd
MCP
CPT, AR
You may be gone, but we will never forget your sacrifice.
"Proud to be an American..." Lee Greenwood
|
|
|
|
|