|
Only use VT_BSTRT if you are using an ANSI string in a UNICODE build, else use VT_BSTR.
v.SetString("Hello, World!", VT_BSTR);
When you output a CString via std::cout you have to cast your CString variable to an LPCTSTR
std::cout << (LPCTSTR)s << std::endl;
At least that is what I have to do in .NET 2002.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it! Honoured as one of The Most Helpful Members of 2004
|
|
|
|
|
PJ, thanks, it works, but it does not make any sense…
1) check out what MSDN says on this:
A DAO recordset in a non-UNICODE build expects strings to be ANSI. Thus, for DAO functions that use COleVariant objects, if you are not creating a UNICODE recordset, you must use the COleVariant::COleVariant( lpszSrc, vtSrc ) form of constructor with vtSrc set to VT_BSTRT (ANSI) or use SetString with vtSrc set to VT_BSTRT to make ANSI strings. For example, the CDaoRecordset functions CDaoRecordset::Seek and CDaoRecordset::SetFieldValue use COleVariant objects as parameters. These objects must be ANSI if the DAO recordset is not UNICODE.
2) It breaks backward compatibility with MFC6, namely this one will print just one letter “H”:
#include "stdafx.h"
int main()
{
COleVariant v;
v.SetString("Hello, World!", VT_BSTR);
CString s;
// why 's = v.pcVal' works, but 's = v' does not?
s = v.pcVal;
std::cout << (LPCSTR)s << std::endl;
return 0;
}
so the backward compatible version of a non-Unicode build should be like this:
#include "stdafx.h"
int main()
{
COleVariant v;
v.SetString("Hello, World!",
#if _MFC_VER >= 0x0700 // represents MFC version 7 and later
VT_BSTR);
#else
VT_BSTRT);
#endif
CString s;
// why 's = v.pcVal' works, but 's = v' does not?
#if _MFC_VER >= 0x0700 // represents MFC version 7 and later
s = v;
#else
s = v.pcVal;
#endif
std::cout << (LPCSTR)s << std::endl;
return 0;
}
but does it make any sense?
Thanks,
Serge
|
|
|
|
|
There are two things to remember, one: MSDN is not always correct, two: not everything is backwards compatible.
Serge Krynine wrote:
#if _MFC_VER >= 0x0700 // represents MFC version 7 and later
VT_BSTR);
#else
VT_BSTRT);
#endif
There are obviously differences between COleVariant v6 and v7 as they act differently. Just right click on VT_BSTRT in both VC6 and VC7 and you will be brought to different definitions.
Serge Krynine wrote:
CString s;
// why 's = v.pcVal' works, but 's = v' does not?
#if _MFC_VER >= 0x0700 // represents MFC version 7 and later
s = v;
#else
s = v.pcVal;
#endif
CString in VC6 does not have an operator = const VARIANT& and VC7 does.
Try different settings, and use the debugger's variable watch window to see what is happening.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it! Honoured as one of The Most Helpful Members of 2004
|
|
|
|
|
Hi
I got an application with a lenghtly task in managed C++. I wish to disable the form to prevent user from doing anything and have a waitcursor (hourglass) when the task is running.
this->Cursor = Cursors::WaitCursor;
this->Enabled = false;
the task
this->Enabled = true;
this->Cursor = Cursors::Default;
The problem is when I disable the form, the WaitCursor disapear. If I remove the call to restore the cursor, the WaitCursor appear with the form enable.
Thanks for your help to resolve my problem
SL
|
|
|
|
|
Hi
Use the following code
void CTestDlg::OnLongProcess()
{
CWaitCursor wait;
.
.
.
Sleep(4000);
//Some Long Process
.
.
.
.
wait.Restore(); //Restore the Wait cursor
//Continue process
}
This may help you
Sujan
|
|
|
|
|
Hi all,
I know this could be a very easy question to others.. but to the people like me will love to read this.
I have one dll to use in my project. So I went to project, add reference, on the com tab, I browsed the dll from my local drive.
Then, I'm stack.. I dont' know how to use it.
I already add the myDll.dll to my project as a com reference..
but I have no idea how to call myDll.dll memeber properties and funcations.
I tried to declare like
myDll mydll;
but I got error.
Pleaseplease help me out.
Thanks
|
|
|
|
|
|
Hello there.
I have a project for my school about digital watermarking in C++. I'm searching for a long time now and I can't find how can I embed a watermak to a digital image (visible and invisible). I don't want just a text over an image. The watermark with using the embeding algorithm can be removed.
Does anyonw know how?
Thanks
|
|
|
|
|
If you read my C# articles on image processing, they show how to use GDI+ to access the bits of an image. My articles on GDI+ in C++ should be enough to show how to set up GDI+ in a C++ project generally. There's also an article on CP somewhere about hiding information in an image ( dunno in what language ) which should be very helpful.
Remember if that last article does exactly what you want, to read it, study the code, then put it to one side and rewrite it so you're sure you understand how it works.
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|
Sure, I'd like to read your articles, but I don't know much about C#, is it the same with C++? Where can I find them?
Thanks
|
|
|
|
|
oh ok I found them. Sorry I'm new here
|
|
|
|
|
|
hi all!
i'm thinking about dictionary algorithm. anyone have ideas!
please, tell me as posible!
thank!
|
|
|
|
|
|
hi all!
Normally shortcut file(*.lnk)was created andd allow to chang icon. how to disable the button "change icon"?
thank!
Borat
|
|
|
|
|
Dear sirs:
I need an application to discern two sources of USB keyboard input from the same machine. What would be the easiest way to accomplish this?
Thank you,
Rob Hyland
|
|
|
|
|
how do you do it
some code would be nice
I would like to hook the navigate method from IWebBrowser2 Interface
and
would it be possible to get a interface pointer from IWebBrowser2 when I am hooking?
please reply whit whatever you have on this
thanks in advance
|
|
|
|
|
Hi,
I am new to VC++ win32...I was trying to compile and run a project..it has
#include <newdev.h>
#include <cfgmgr32.h>
in one the cpp files...
cfgmgr32.h file has #include <cfg.h>
But when compiling the project it says that it could'nt find these files.
I understand that the newdev.h and cfg.h are api files that comes with .NET SDK package. But I could'nt find those files in sdk directory..
What should I do or how should I get those files..
Thanks in advance..
|
|
|
|
|
sorry the names are missing..
#include newdev.h
#include cfgmgr32.h
#include cfg.h
|
|
|
|
|
Hello,
CString Path = "Z:\\Clients\\" + client + "\\incoming\\*.*";
m_ClientFileListBox.GetDlgItem(IDC_CLIENTLIST);
m_ClientFileListBox.ResetContent();
m_ClientFileListBox.Dir(DDL_READWRITE, Path);
how do i load files of just *.txt and *.csv only?
thanks,
Lino
|
|
|
|
|
lino_i wrote:
how do i load files of just *.txt and *.csv only?
Change the pattern from *.* to *.txt and *.csv respectively.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
does that require two lines of code?
Is it possible to do it all on one line?
or do i have to call m_ClientFileListBox.Dir(DDL_READWRITE, Path) two times switching the file types in the Path variable?
|
|
|
|
|
If you are just searching a small number of folders, the Dir() method can be called once for each different pattern. This will obviously not work when a large number of folders are involved. In that case, specify *.* as the pattern and filter out each file as it is encountered.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
( following a question I asked yesterday ... )
I have a modeless dialog that contains a series of child modeless dialogs ( to implement basic UI components ).
When I destroy my parent modeless dialog, I call
void MyParentDialog::KillMe()
{
DestroyWindow(); }
Is it necessary ( or preferred ) to call DestroyWindow ( or something else ) on each child modeless dialog ?
for example :
void MyParentDialog::KillMe()
{
m_pChild1->DestroyWindow();
m_pChild2->DestroyWindow();
m_pChild3->DestroyWindow();
...
DestroyWindow(); }
Thanks again.
Max.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
Maximilien wrote:
Is it necessary ( or preferred ) to call DestroyWindow ( or something else ) on each child modeless dialog ?
No, they will be destroyed automatically. In fact, they will be destroyed before the parent window is destroyed.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|