|
Thanks, this may be just what I need to get started
Sonork 100.11743 Chicken Little
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
Within you lies the power for good - Use it!
|
|
|
|
|
HI all,
Plz anyone can tell me where to get any online tutorials to start learning COM?I am new to it and need ur help.Plz help me
Poornima
|
|
|
|
|
got to ATL/WTL...u will find beginners 5 articles...
|
|
|
|
|
http://www.codeproject.com/atl/#Beginners
at least madam give search or do look at left hand side bar of Codeproject for titles
cheers
Balkrishna
|
|
|
|
|
Question:
How to return SafeArray inside of Variant from COM component?
My COM component is out-of-process component ie.EXE and client
is coded in VB. I am building communications interface for
VB clients and have a need to return array of bytes.
Passing of Variant arry to COM-component thru IDispatch is ok and
returning of parameters that are not arrays is also working.
Any help is warmly welcomed!
Example code from idl which tries to return array thru inVal - parameter:
[id(7), helpstring("method to Test3 interface with Variants")] HRESULT get_Test3( [in, out] VARIANT *inVal, [out, retval]VARIANT *pVal);
Declaration on C++ :
STDMETHOD(get_Test3(/*[in, out]*/ VARIANT *inVal, /*[out, retval]*/ VARIANT *pVal);)
And Implementation:
STDMETHODIMP TestClass::get_Test3(/*[in, out]*/ VARIANT *inVal, /*[out, retval]*/ VARIANT *outVal){
ZeroMemory(inVal, sizeof(VARIANT));
BYTE dummyInput[3] = {0,1,2};
CDispatchHelper::ConvertFromBytePtr2Variant(dummyInput,&inVal);
return S_OK;
}
And implementation of ConvertFromBytePtr2Variant() - fucntion
//Converts given byte array to SAFEARRAY contained in Variant.
//NOTE: Now this just creates array of 100 ints for testing purposes
BOOL CDispatchHelper::ConvertFromBytePtr2Variant(BYTE *_byteToConvert, VARIANT **_ppResult)
{
SAFEARRAY *pNewSafeArray = NULL;
// one dimensional array with 100 elements and
// zero-based indexing
SAFEARRAYBOUND rgb [] = { 100, 0 };
// allocate the memory for the descriptor
// and the array data
pNewSafeArray = SafeArrayCreate(VT_I4, 1, rgb);
if (pNewSafeArray) {
// get ptr to array base
long *rgelems;
SafeArrayAccessData(pNewSafeArray, (void**)&rgelems);
// initialize each element
for (int c = 0; c < 100; c++)
rgelems[c] = c;
// release lock on array state
SafeArrayUnaccessData(pNewSafeArray);
}
//Now we have safe array in pNewSafeArray
//Put array in Variant
*_ppResult = new VARIANT;
if (*_ppResult == NULL){
ATLASSERT(FALSE);
return FALSE;
}
ZeroMemory(*_ppResult, sizeof(VARIANT));
(**_ppResult).vt = VT_I4 | VT_ARRAY;
(**_ppResult).parray = pNewSafeArray;
return TRUE;
}
VBClient side code is this:
Dim testInOut As Variant
testOut = oIdiootti.get_Test2(testInOut)
'Here value of testInOut is not changed, if transaction were succesfull
'parameter should contain 100 integers with values 0,1,2,3...
|
|
|
|
|
Now I tried to create array of bytes before sending array to COM - component and in component I write just to these allocated bytes. Result is succesfull transaction. But if I try to create new array using SafeArrayCreate() APIs transfer wont succeed.
Any sound explanations would be helpfull.
|
|
|
|
|
Hi,
I am trying to open a word template that has auto macros that fire when the template is opened. I need to disable these programmatically.
In Delphi you can use the following to achieve this:-
OleVaraint(myWordApp.WordBasic).DisableAutoMacros;
myWordApp.Documents.Open(blaa...blaaa...blaa...
I really need a way to do this in .net (C# if possible).
Any help would be most appreciated.
P.S. Anybody know any other good places to ask?
|
|
|
|
|
Hi all,
I am a newbie in COM, I want to know how activeX creation take place, when you embed and activeX in container.
Thanks in advance,
Abhishake
|
|
|
|
|
Use Full COntrol or composite control...and rest is the kinda fun...
then u need to add property bag...to get vb RHS effect...
|
|
|
|
|
hey, i was wondering if can anyone tell me a way to override the default actions of a certain control, create new ones, and disables ones.
let's say i have a control X, we all know that in API, all r considered as windows. Let's say i have its handle. and this X control is inside my window Y. I want to know if there's a way to add new "message handles" for this control: what if this control doesnt support left click and i want to add one? (i could use the left click on the parent using some coordinates calculations) , how about overriding existing events? Ie: I want the button to be clicked when i press the right click. (i'll suppose that the control doesnt have any event capture for the right click). and... what if i want to disable the left click on this control?... I know all those stuff have a certain way to be dealt with. In order to override some functions, i used followed the mouse on the parent, when it's inside the window, and its location has changed, i'll SetCapture on the parent. any better ideas about this subject? ... my way works but not perfectly (i will have to send all the other msgs i need to the control which will make the job lengthy),that's why I need ur help guys
lebgenius
|
|
|
|
|
I'm calling a COM function inside this C++ function. How to convert char* to
BSTR and BSTR*?
void myFunction( IN char* name,
OUT char* path)
{
MyCOMFunction( CComBSTR( name), ??);
}
The COM function prototype is like this:
HRESULT MyCOMFunction(IN BSTR name,
OUT BSTR* path)
{
}
Thanks.
|
|
|
|
|
void myFunction(char* name, char* path)
{
BSTR bstrPath;
MyCOMFunction(CComBSTR(name), &bstrPath);
}
Hope this helps,
|
|
|
|
|
hi,
i have an client application through which i can fetch the data of the opc server now i have to update the data. please anyone help me
|
|
|
|
|
I have function which i pass in parameter IXMLDOMDocument **paXMLDocument
plus a CComBSTR string. Inside the function i create a new document and load
the string which i passed in using loadXML.
My problem is how can i copy this document to the **paXMLDocument document
so it can be passed back from the function. Also this function should create
a new document for me as well - before i call the function below i define
paXMLDocument as CComPtr <ixmldomdocument> paXMLDocument and I dont call
cocreateinstance. I would like to get the function to create it for me.
Any assistance would be appreciated.
Thanks
Andy
short getDoc (IXMLDOMDocument **paXMLDocument, CComBSTR sXMLDoc)
{
CComPtr<ixmldomdocument> paXMLDoc;
HRESULT hr = ::CoCreateInstance(CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&paXMLDoc);
if (FAILED(hr))
return -1;
VARIANT_BOOL bIsSuccessful = FALSE;
// load xml document
hr = paXMLDoc.loadXML(sXMLDoc, &bIsSuccessful);
if ((FAILED(hr)) || (bIsSuccessful == VARIANT_FALSE))
return -1;
//
// this doesnt work!!!!!
//
hr = paXMLDoc->QueryInterface( paXMLDocument);
if (FAILED(hr))
return -1;
return 1;
}
|
|
|
|
|
Really an ATL/C++ question. After loading the XML document:
*paXMLDocument = paXMLDoc.Detach();
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
We are doing a project doing a study on the posibility to make OpenOffice into a “webprogram”. This is similar to a web mail.
To describe the project better, the whole point is to be able to use OpenOffice anywhere in the world, with any web browser, any operating system etc. We currently have a web server to use for the server part. The Client part would be a web browser and that’s it. Similar to thin Client but better, where there will be no specific client installation.
The thing is, I am thinking on using Java Applets and using some ActiveX implementation. Maybe it could be done with just a plugin to the internet explorer im not shure.
Any leads and information on this is welcome.
MVH
Locktotten(Sweden)…
Locktotten...
|
|
|
|
|
I have a VC++ program in which two IScriptControlPtr smart pointers are created in thread "1". Thread "2" calls the Run() method against the first IScriptControlPtr, and thread "3" calls the Run() method against the second one. All three threads call CoInitializeEx(NULL,COINIT_MULTITHREADED) first.
What I am finding is, thread 2 (or 3) blocks until thread 3 (or 2) has finished, even though they are running against separate IScriptControlPtr objects (and no other thread is trying to access these smart pointers).
Has anyone seen this behaviour before / is this to be expected?
Is there perhaps bad multithreaded handling in msscript.ocx? (I am using version 1.0.0.7615).
Many thanks,
Neil.
|
|
|
|
|
The msscript.ocx control is registered with the Apartment threading model. This means it has affinity with the thread on which it is created - COM will force calls from a different thread onto the thread which created the object.
If you want to use multiple script controls concurrently, you should create them on the threads which will call their methods.
I'm not sure, but I think using COINIT_MULTITHREADED with an Apartment object will cause you to get a proxy to the object even though you're calling an object on the same thread.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Thanks for your reply, Mike. I suspected this might be the case.
When you say "The msscript.ocx control is registered with the Apartment threading model" ... is this documented somewhere on the web? I spent some time searching, but don't recall that particular chestnut It might be nice to have some definitive documentation for once, rather then relying on Google and trial and error!!!!
|
|
|
|
|
It's not documented on the web AFAIK, but ActiveX controls are almost always registered with the Apartment threading model (although you'll see some not marked at all, therefore running on the primary thread, and some marked Both). An ActiveX control (as opposed to a component) is intended for use on a window.
As for how msscript.ocx is registered, I used regedit and searched HKEY_CLASSES_ROOT\CLSID for that filename.
I never asked why you're not just using the script engines directly. This page[^] suggests which you should use when.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
The reason I didn't use the script engines directly is - I didn't know about them! I am just a beginner with this to be honest. Thanks for bringing it to my attention, it definitely looks like the way to go.
cheers,
Neil
|
|
|
|
|
I have an app in which I want to be able to inspect the headers coming in to IE. Through a little research, I've determined that I need to use IBindStatusCallback and IHttpNegotiate to accomplish this. I've derived my COM object including these two interfaces and have implemented them. In my FinalConstruct(), I call RegisterBindCallback(). My problem is that none of the methods of the above two interfaces appear to be called. is anyone familiar with these methods? What am I missing?
Thanks.
|
|
|
|
|
i want to Build a screen saver which should terminate when i move the mouse or press key board button. During the execution of the screen saver its dialog painting should change with different colors and pattern with a specified time interval.
|
|
|
|
|
i want to store some records on disk using iostream.h
these records are about persons. i have to store pictures of persons and then i want to retrieve/search these records. and show the picture on the dialog. can some one help me in doing this
|
|
|
|
|
Can any one tell me that how can i call a com / Activex function via javascript and vbscript. Currently i am doing some thing as follows but in web page i get the error that object doesnt support this property or method :
<body>
<object id=MUMSocket1 style="LEFT: 0px; TOP: 0px" classid="clsid:BDBEED17-BE31-475E-966F-28A3F07FDBBD" VIEWASTEXT>
</object>
<input type="button" value="Button" id=button1 name=button1 onclick=ini()>
<script language ="javascript" >
function ini()
{
MUMSocket1.Initialize ()
}
</script>
</body>
|
|
|
|