|
The Windows Media 9 Series SDK provides a number of methods to read/write/edit.
Perhaps you want to have a look at Windows Media Format SDK from the following site:
http://www.microsoft.com/windows/windowsmedia/9series/sdk.aspx
It's not DirectShow but it's significantly smaller in size compared to the DirectX download.
|
|
|
|
|
Okay... thanks for the input!
Tom
|
|
|
|
|
how to show a message box in an ASP.NET page?
I am a Software Developer using C# on ASP.NET.
|
|
|
|
|
I would like to know if it is possible to wrapp other things than predefined types (like ints, floats and strings) with the VARIANT type.
I need to use a COM server function that takes a VARIANT as parameter. But tthat parameter has to be an object of type IXMLDocument. How can I cast the IXMLDocument object into a VARIANT one?
Thanks a lot
|
|
|
|
|
Hi,
I need to pass an ADODB.Stream to a COM object I have created in C++.
The object comes in as a VARIANT.
I guess I need to get the IDispatch and query interface for something.
Has anyone ever done this? All my tests have failed, most of which are reporting "no such interface supported"
thanks.
Jeremy Pullicino
C++ Developer
Homepage
|
|
|
|
|
I use automation to launch Excel, it's work but i don't know how do you do to close Excel process. I use CLSIDFromProgID and GetActive Object to start excel automation. I search a exemple to close automation.
Thanks
Jerome
|
|
|
|
|
In order to attach to Excel, you will have called CreateDispatch() and/or AttachDispatch(). There is a corresponding function ReleaseDispatch() which you can call when you do not need the interface open any longer.
Alternatively, you could use the second parameter of void AttachDispatch( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) to autorelease the interface for you.
Note that Excel, or any other automaton, will not close until all the attached interfaces have been released.
|
|
|
|
|
Hi everyone,
I have an MFC app (with a CWinApp-derived object) that uses COM objects (Crystal Reports). The COM library is imported into my project via the #import directive. I'm using VStudio 6.0 sp5.
I've created a global object called _com_init:
struct ComInit {
ComInit() { ::CoInitialize(NULL); }
~ComInit() { ::CoUninitialize(); }
} _com_init_;
This way, I guarantee that COM will initialize before the _main() and terminate after the _main().
When my program reaches ~ComInit() and calls ::CoUninitialize(), I see the following message in my Debug Output Window:
First-chance exception in MyApp.exe (OLE32.DLL): 0xC0000005: Access Violation.
Any ideas? I've looked up other CoUninitialize threads in these forums, but couldn't figure out something that would solve my problem...
Thanks.
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
Watch carefully if you don't use the COM after the CoUninitialize . It looks weird but e.g. if you use the smart pointers or something it can easily happen that first is called a d-tor of the ComInit class and then destructor of smart ptr calling Release (=using COM)
|
|
|
|
|
Yeah, well, that's exactly the problem. The only place I use COM in this application is within the CWinApp class. I even tried working with the debugger, pressing F11 at the end of each funtion in order to get into all d-tors. Yes - I do work with com_ptr's (COM's version of auto pointers), but they're all destroyed before CoUninitialize, as far as I could tell.
Anything else I should check?
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
Hmm I would look also to variants and bstrs as well, because they uses COM too.
Some smartpointer in global variable...
Maybe some addref/release leak causing some OLE proxy/stub stuff remainig in memory until CoUnitialize is called (but I assume that's not the issue while you're using smartptrs)
|
|
|
|
|
There is use of bstrs in my code... what exactly should I check about them?
I don't have ANY global smart pointers. I only have local ones, and I checked with the debugger, that they all get released when they go out of scope...
/=/=/=/=
Deus
/=/=/=/=
|
|
|
|
|
I assume you're using _bstr_t or CComBSTR -> their behavior is exactly the same as smart pointers, therefore destructors should be called before CoUninitialize .
|
|
|
|
|
Call AfxOleInit() from your CWinApp::InitInstance() override. You are guaranteed not to have any of those problems after that.
Isaac Inyang
Ansyl Technologies
|
|
|
|
|
Try using the initinstance and the exitinstance to do the initialization and termination of the component...
this i guess should work perfectly...
You should be sure that when the destrcutor of the structure is called.
The World is getting smaller and so are the people.
|
|
|
|
|
I have a VB application using ADODB connections now. I am wondering whether it is feasible and desirable to use ADO.NET via COMInterop?
Thanks in advance for sharing your views, experience and insights.
DavidQR
12Nov2003
|
|
|
|
|
DavidQR wrote:
I have a VB application using ADODB connections now. I am wondering whether it is feasible and desirable to use ADO.NET via COMInterop?
If you are wondering if you can use ADO.NET (or any .NET component) from a COM-based environment the answer is yes. If you are interested I have written an article that may help: Creating a CCW for COM enabled non .NET applications[^]
-Nick Parker
DeveloperNotes.com
|
|
|
|
|
DavidQR wrote:
I have a VB application using ADODB connections now. I am wondering whether it is feasible and desirable to use ADO.NET via COMInterop?
If you are wondering if you can use ADO.NET (or any .NET component) from a COM-based environment the answer is yes. If you are interested I have written an article that may help: Creating a CCW for COM enabled non .NET applications[^].
-Nick Parker
DeveloperNotes.com
|
|
|
|
|
I am stumbling my way through COM and have hit a snag. I can get a MessageBox to work from a call to my component but I cannot get a CDialog derived class to display. Every thing runs fine but the CDialog derived class has hWnd=0xcccccccc which means nothing happens when I call DoModal(). I am using a MFC extension dll to serve up the components. What gives? Thanks for your time.
void __stdcall CMattDlgCmpnt::SimpleMsgBox( HWND wndParent, BSTR strmsg )<br />
{<br />
...<br />
MessageBox ( wndParent, strTxt, _T("Simple Message Box"), MB_OK );<br />
return;<br />
}<br />
<br />
void __stdcall CMattDlgCmpnt::HtmlMsgBox( HWND wndParent, BSTR strmsg )<br />
{<br />
<br />
CNormalDlg wndNormalDlg;
wndNormalDlg.DoModal();
}
Matt (Padawan Learner)
|
|
|
|
|
The cool thing about COM is that you don't have to worry about implementation (i.e., VC++ vs. VB vs. et al.). The bad thing about COM is that you don't have to worry about implementation!
The important thing is to get an HWND through a COM-friendly manner. Your CNormalDlg needs a parent HWND (or application frame HWND). You can either design your class so that you pass that wndParent to its constructor or something (to associate the parent HWND; this is a fairly common practice). Or, in the spirit of .NET, you can QI the container for various OLE-defined or user-defined (you and / or your team) interface, like IOleWindow (common for ActiveX UI components). It has a method GetWindow that returns (via a retval) the HWND. How you QI the parent is another store, but usually has to do with implementing IOBjectWithSite or something similar (the container should QI for this and call SetSite to pass its IUnknown interface that you would hold on to in order to QI it later, for IOleWindow or something). Of course, the container has to implement / support these interfaces. COM is all about contracts, and the "terms" of those contracts is up to the containers and components - you don't get all the functionality for free!
So, either of these methods (either passing the parent HWND or QI'ing for an interface to get the parent HWND) are pretty common. I used a similar QI when I wrote an IE BHO that QI'd the site for the IWebBrowser2 interface then call get_HWND to get its HWND. I then used that as the parent HWND when displaying dialogs and what-not.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Thanks. I will first try to pass the parent HWND in and try get things working that way. Then I will attempt the QI of the container. I suppose that underneath the hood that is what MessageBox and AfxMessageBox does, yes?
Matt (Padawan Learner)
|
|
|
|
|
No, they take an HWND (as you're doing in your code) or, if NULL, use 0 (the desktop's HWND - the top-level window).
Keep in mind that the container must implement the interface your QI'ing for, and that it has to give you a pointer to it somehow (IOBjectWithSite is but one of many ways - including the infinite possibilities that you can define). Again, the container has to support QI'ing for that interface. The best thing is too support various OLE interfaces when appropriate. Most containers like IE, Word, Excel, etc., support these interfaces. It's all basically speghetti work - interfaces implemented and supported strewn all over and the container and the component must understand each other somehow. Many times, ActiveX controls will support several interfaces that accomplish the same thing (or at least share a common subset) so that they can be contained in various containers taking a chance that the containers support at least one of the interfaces the ActiveX control implements.
If you are using a Microsoft container, there should be documentation in the PSDK about what interfaces it supports. If it's a non-Microsoft container but still third-party to you, I would hope they would have similar documentation. If you wrote it, then make it support whatever (either pre-defined or define your own) you like. If it can contain practically any ActiveX control, again looking at and implement the various OLE interfaces, IPersist* interfaces, and various others is always safe. If it's pretty much a custom solution, the latter suggestion would probably be overkill.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Getting closer, but no cigar yet. I passed in the parent like so:
void __stdcall CMattDlgCmpnt::HtmlMsgBox( HWND wndParent, BSTR strmsg )<br />
{<br />
CWnd* pWnd = new CWnd();<br />
pWnd = CWnd::FromHandle(wndParent);<br />
<br />
CNormalDlg *wndNormalDlg = new CNormalDlg( pWnd );<br />
wndNormalDlg->DoModal();<br />
}
It seems that the class is failing to create its own m_hWnd:
{CNormalDlg hWnd=0x00000000}
This may be a question for the C++ board but if you want to tkae a shot at it I'd appreciate it. Thanks.
Matt (Padawan Learner)
|
|
|
|
|
Hi ,
I suggest u too create ur dialog using ATL CAxDialogImpl Temnplate class,
for this u just have to go to insert menu , click New ATL Object ,
under Miscleneaous button u will find Dialog ,
insert into ur project,
Actually in ATL contains several template classes for allowing u to use window.
using CAxDialogImpl this template class u can easily create model or modeless dialog box.
Just by making ur dialog class object and DoModal with it
Abhishek Srivastava
Software Engg (VC++)
India ,Noida
Mobile no 9891492921
|
|
|
|
|
I tried to add ATL to my dll but it says that ATL can only be added to regular MFC dll. Mine is an extension dll.
Thanks for all the help guys, but I think I am in over my head here. I thought that once I got the basics down I could jump right and use MFC. All the books I have don't show any examples similar to what I am doing. I ordered some books on COM, MFC, and ATL today...
Matt (Padawan Learner)
|
|
|
|