|
No, and that will leak actually. Just do a plain assignment, which will use the operator= that takes an LPCOLESTR .
m_strNoPrompt = strNoPrompt;
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
So
Func( BSTR strSomeString )
{
BSTR str = SysAllocString(strSomeString);
}
would be ok then? SysAllocString is only used to copy a BSTR to another BSTR?
Thanks for your help!
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
LukeV wrote:
would be ok then?
Nope.
SysAllocString takes a wide string and allocates a new string in BSTR format. You have to manually free the bstr using SysFreeString .
You can let a CComBSTR object assume ownership of a bstr string. See CComBSTR::Attach for more information. When the CComBSTR assumes ownership of the bstr string, it means that it will free it when the CComBSTR object itself is deallocated (done in CComBSTR::~CComBSTR ).
--
Shine, enlighten me - shine
Shine, awaken me - shine
Shine for all your suffering - shine
|
|
|
|
|
Which one to use? It seems that COLE2T might get unstable in some part of my code, while OLE2T seems better... what's the difference and when to use 'em?
Thanks again!
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
Ole2T is from good old ATL3 which is working with VC6.
It also needs the USES_CONVERSION macro.
It's stack-based (using _alloca()) and therefore it can not be used with large strings or in loops.
COLE2T is from ATL7, and only works with VC7.
Don't need the conversion macro
When using small data it allocates data on the stack for performance, but with larger data it allocates on the heap.
Is safe to use in loop, because it's basically a class, so allocated resources is free'ed when it goes out of scope.
Hope that helps a bit.
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
So basically, I'm better off using the Cx2x macros for every situation? I don't have an example but I think I recollect these macros to bring problems or perhaps something I did (like not removing USING_CONVERSION) would make it fail...
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
I use the Cxxx for all my conversions now, and I have not had any problems with them...
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
All right, thanks!
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
Dito, the new classes are much sweeter than the old USES_CONVERSION -based macros.
--
Shine, enlighten me - shine
Shine, awaken me - shine
Shine for all your suffering - shine
|
|
|
|
|
strMessage is a BSTR
c_pcSource is a TCHAR*
void SetSource( TCHAR * p_pcSource )
{
c_pcSource = p_pcSource;
}
this:
a_oStream.SetSource( COLE2T( strMessage ) );
will somehow corrupt c_pcSource... it's content will be trash... If I use OLE2T instead, it works... why?
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
LukeV wrote:
it's content will be trash... If I use OLE2T instead, it works... why?
Dunno, sounds strange. Maybe a bug in ATL7...
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Topic says it all.. what should be used when passing parameters to a function?
Thanks!
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
Normally I use T2Ole, works fine.
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Anders Molin wrote:
Normally I use T2Ole, works fine.
CT2OLE or T2OLE? If it's T2OLE, then you've got me confused!
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
CT2OLE
I used to use T2OLE.
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Those do entirely different things. T2OLE converts a TCHAR string to a Unicode string. SysAllocString() allocates a new BSTR on the heap. It's impossible to answer your question without knowing the function in question.
--Mike--
THERE IS NO THERE IS NO BUT THERE IS
MAGIC PIXIE DUST BUSINESS GENIE CODE PROJECT
Homepage | RightClick-Encrypt | 1ClickPicGrabber
"Which comes first, the bug or the stress?" -- Chris Maunder
|
|
|
|
|
CAtlString strPAK("");
CAtlString strName("");
dlg.GetRegInfo( strPAK, strName );
Func1( strName.AllocSysString(), strPAK.AllocSysString() );
...
...
Func1(CComBSTR strName, CComBSTR strPAK)
{
...
}
Does this helps?
---------------
Tired of Spam? Introducing InboxShield® for Microsoft® Outlook®
http://www.edovia.com
|
|
|
|
|
I wrote a COM by using VC++6, implemented IDispatch and IClassFactory. The name is RegUtil.CoRegistry. I have inserted HKCR\RegUtil.CoRegistry\CLSID = {xxx} and HKCR\CLSID\{xxx} = RegUtil.CoRegistry and HKCR\CLSID\{xxx}\InprocServer32 = path to my COM.
But I cannot using CLSIDFromProgID. It cannot find my program id??
But I can use CoGetClassObject.
I don't know what went wrong. At first, I create the project as simple com (IUnknown, IClassFactory), no IDispatch support.
After that I try to put IDispatch support into the project.
Anybody can give me some glint?
|
|
|
|
|
If this article is not suitable to show in this forum, which forum is better?
thanks.
|
|
|
|
|
Can someone please point me towards resources on how to use Microsoft COM objects
from a Java app ?
-=jarl=-
|
|
|
|
|
http://www.nevaobject.com/[^]
Here ya go. It costs money, but I believe it's worth it. You can try some samples if you wish.
--
Shine, enlighten me - shine
Shine, awaken me - shine
Shine for all your suffering - shine
|
|
|
|
|
I have a small testing code in c# for the WM4.7:
<br />
using System;<br />
using Messenger;<br />
<br />
namespace MessengerDemo<br />
{<br />
<br />
class MessengerDemo<br />
{<br />
<br />
[STAThread]<br />
static void Main(string[] args)<br />
{<br />
MsgrObject msgr = new MsgrObject();<br />
MessengerApp mapp = new MessengerApp(); <br />
<br />
<br />
<br />
if(args.Length == 0) <br />
{<br />
foreach(IMsgrService service in msgr.Services) <br />
{<br />
Console.WriteLine(service.ServiceName);<br />
}<br />
} <br />
if(args.Length == 1)<br />
{<br />
if(args[0].Equals("logoff"))<br />
msgr.Logoff();<br />
<br />
if(args[0].Equals("quit"))<br />
mapp.Quit();<br />
}<br />
}<br />
}<br />
}<br />
The logoff method called on the messenger object works fine. The problem is the quit method, which is part of IMessengerApp, IMessengerApp2 and IMessengerApp3. I got no compiling errors with the code above, but if I run the prog with the argument quit, I got this Exeption:
<br />
D:\Projects\Messenger\bin\Debug>messenger quit<br />
<br />
<br />
Unhandled Exception: System.InvalidCastException: QueryInterface for interface Messenger.IMessengerApp3 failed.<br />
at Messenger.MessengerAppClass.Quit()<br />
at MessengerDemo.MessengerDemo.Main(String[] args) in d:\projects\messenger\messenger.cs:line 39<br />
Why it wants to cast it, the ImessengerApp3 should be part of Messenger.MessengerAppClass.... Anybody got an idea?
|
|
|
|
|
Hello everyone.
Out of process servers that expose COM objects, have no registry settings that specify the threading model they use. Suppose we want to find out their component's threading model, what can we do?
I'm specificaly interested in the threading model of the objects that MS Word exposes. Do they belong to an STA or an MTA? Type libraries don't include threading model information, so what can we do? Run some tests?! Or SoftIce on CoInitializeEx? !!!
Jason
|
|
|
|
|
Hi,
I have a few ActiveX controls in a browser, and I want
them to access each other's method( without creating a new instance)
Can someone tell me how can it be done.
Thanks,
Sansky
John 3:16
For God so loved the world,
that he gave his only begotten Son ( Jesus Christ ) ,
that whosoever believeth in him should not perish, but have everlasting life.
|
|
|
|
|
Hi there,
I have an app here that already initializes COM via a call to CoInitializeEx(NULL, COINIT_MULTITHREADED). I have recently added drag and drop support, and am calling AfxOleInit() some time after the call to CoInitializeEx(). This works on my development machine no problem, but on another machine AfxOleInit()'s call to CoInitialize() fails with RPC_E_CHANGED_MODE. I don't understand why it works on my first machine, though I realize the failure on the second machine is due to the fact that it was initialized to MTA and now we are trying to use STA.
Any ideas? Surely you can use COM as well as drag and drop in a single application, right???
Thanks,
swine
[b]yte your digital photos with [ae]phid [p]hotokeeper - www.aephid.com.
|
|
|
|