|
|
hi!
I want to insert an object into MS Word using function AddOleObject of Words Object Model. i did it using visual basic 6 using the following function.
InlineShape.AddOleObject(insRange,"{7A4960FC-645E-4971-B2C4-E4C3DB896D10}","",False,False);
where insRange is of Range type. it worked fine. but the problem is that i want to do it in Visual C++6. Now the function prototype in VC++6 is hereunder
MSWord::InlineShapes::AddOLEObject ( VARIANT * ClassType, VARIANT * FileName, VARIANT * LinkToFile, VARIANT * DisplayAsIcon, VARIANT * IconFileName, VARIANT * IconIndex, VARIANT * IconLabel, VARIANT * Range )
i am a bit confused about how to use this function in VC. I tried it using following code.
VARIANT varClassType; VariantInit(&varClassType);
VARIANT varLinkToFile; VariantInit(&varLinkToFile);
VARIANT varDisplayAsIcon; VariantInit(&varDisplayAsIcon);
VARIANT varEmpty; VariantInit(&varEmpty);
VARIANT range; VariantInit(&range);
varClassType.vt = VT_BSTR;
varLinkToFile.vt = VT_BOOL;
varDisplayAsIcon.vt = VT_BOOL;
range.vt = VT_I4;
_bstr_t clsID = "{7A4960FC-645E-4971-B2C4-E4C3DB896D10}";
varClassType.bstrVal = clsID.copy();
varLinkToFile.boolVal = FALSE;
varDisplayAsIcon.boolVal = FALSE;
varEmpty.vt = VT_EMPTY;
range.lVal = 0;
MSWord::InlineShapePtr SigObj = m_pWordApp->ActiveDocument->InlineShapes->AddOLEObject(&varClassType, &varEmpty, &varLinkToFile,&varDisplayAsIcon,&varEmpty, &varEmpty,&varEmpty,&range);
but unfortunately when last line of above code executes my program crashes. i think that the problem is with my first and last parameter in the AddOleObject function. I dont know how to resolve it.
Please help me.
Thanks
|
|
|
|
|
Hi,
I have a dialog app that has a list control that lists a dynamically set number of items. During the operation of the programme these items can become active or inactive but user is only allowed to set one item at a time. Hence I have a single selection list box.
During the operation of the programme there is always one item in use. And here in lies the problem...
...on startup how do you get a list control to select an item manually?
Thanks in advance,
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proff programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
|
I have been using this call that I have been using but calling this in InitDialog but with no luck. If I call it is OnClick (for example) then it works fine. Do you know when would be the best time to call it?
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proff programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
RichardS wrote:
Do you know when would be the best time to call it?
After the list control has been populated. You can certainly do this in OnInitDialog() or anywhere else for that matter.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
|
Hi Friends,
Please check following examples:
Example 1:
class Base1{
public:
int data0;
};
class Base2:public Base1{
public:
int data0;
};
class Derived: public Base2{
public:
int data0;
};
void main(void){
Derived D;
Base1 *bptr1= &D;
Base2 *bptr2=&D;
}
In above case :
Address of D=0x0012ff74;
Address of bptr1=0x0012ff74
Address of bptr2=0x0012ff74;
Now exmaple 2:
class Base1{
public:
int data0;
};
class Base2{
public:
int data0;
};
class Derived: public Base1,public Base2{
public:
int data0;
};
void main(void){
Derived D;
Base1 *bptr1= &D;
Base2 *bptr2=&D;
}
In above case :
Address of D=0x0012ff74;
Address of bptr1=0x0012ff74
Address of bptr2=0x0012ff78;
My question is why the base2 pointer has different address in above situation?
|
|
|
|
|
Hi vikrams,
In you first example the compiler will create the inheritance as:
base1
|
base2
|
Derived
Which means that the compiler only ever needs to know about one int data0 as it comes from base1.
In the second example the tree will be:
base1 base2
| |
---------------------
|
Derived
Which means now int data0 could come from base1 OR base2 so you it needs to create 2 addresses.
cheers,
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proff programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
See Data has to be there in all cases. It can not be overridden.U may conside a case where all there are having different data mebers.
|
|
|
|
|
You are quite right but you missed one thing. You have not created different data members. What you have done is to create each instance of the class with the same data member. Thus the compiler just allocs the same memory place for it. Think of it like what a union does.
The data is there in all cases (base1::data0, base2::data0 and derived::data0 will be all valid calls) the compiler has just seen that the same data member is inherited and thus the same memory can be used. In the first eg this is no ambiguity between the where to locate the memory. In the second one there is, so two locations are located (the first inherited object will line up with the derived class).
Rich
"Programming today is a race between software engineers striving to build bigger and
better idiot-proff programs, and the Universe trying to produce bigger and better idiots.
So far the Universe is winning." -- Rich Cook
|
|
|
|
|
Very simple ( ):
In your first example you're using simple inheritance, and in the second one you're using multiple inheritance.
Using simple inheritance, you'll have a simple object with no ambigous methods, methods of the same name are either hidden or overridden.
In the multiple inheritance situation in example two, you have a method name conflict.
The details about how this applies to the vtables and whatnot is a question for more able people than me
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
See imagene a case where no methods for both type of inheritance. And anyways methods are always outside class objects.
|
|
|
|
|
Que?
vikrams wrote:
And anyways methods are always outside class objects
Yes and no, because the instance will contain the vtable.
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
See don't consider a case of virtual function and inheritance in this case. I just want a clean idea what is happening behind the scene.
|
|
|
|
|
What you've basically got here is something that is essentially the same as the following: (note this is not inheritance, but aggregation --- done to illustrate a point)
struct Derived
{
Base1 b1;
Base2 b2;
}
void main()
{
Derived D;
Base1* bptr1 = &D.b1;
Base2* bptr2 = &D.b2;
}
The reason (Base1*)&D != (Base2*)&D is that each base class has to occupy some part of derived class Derived. In other words, Derived is composed of Base1 and Base2, so when you get a pointer to each of the base classes, it will point at the part of D that is that base class. Try switching the order of the base classes, you will see that the pointer values switch. That will illustrate that pointers to each of the base classes point to the part of Derived that is made up by the respective base class.
|
|
|
|
|
A very good explanation.
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
hi
...posted a question yesterday concerning a problem with "MessageBox"
Now I know where the problem is, but I don´t know how to solve it.
Making a Windows Form App with VC++ .Net 2003, I add my own header file to the project. Trying to use MessageBox::Show("String") gives me an errormessage but only as long as the header file windows.h is included in the project.
Is this windows.h header file incompatible with VC++ or is there any tricks I have to know?
doneirik
|
|
|
|
|
Please write following details:
1) Which type of application u haev created ? (MFC/SDK)
2) what error studio flashes?
|
|
|
|
|
The Windows headers declare two versions of most APIs that take string parameters or buffers which contain strings. These typically end in either W, for a version taking Unicode (word-oriented) strings, or A, for a version taking ANSI (byte-oriented) strings. Windows 9x, in the main, only supplies the ANSI versions; Windows NT and successors (2000, XP, 2003) supply both versions. So there are actually two functions in the API: MessageBoxA and MessageBoxW .
For convenience the headers define a macro which, depending on whether UNICODE is defined, maps to the W or A version of the API. This allows Unicode and ANSI versions of the software to be compiled from the same sources just by defining or not defining UNICODE . So MessageBox is a macro defined to either MessageBoxW or MessageBoxA - the former if UNICODE is defined and the latter if not.
The C++ macro processor is dumb. It doesn't understand that you're trying to call the Windows Forms MessageBox class's Show method. It just replaces the text with either MessageBoxW or MessageBoxA . This will give a compile error because there's no class with that name.
I think the best thing for you to do is to isolate the .NET code in one set of source files, and the unmanaged code in another set. In the unmanaged set, include windows.h ; in the managed files, don't. If it's in your precompiled header file, remove it.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Hi there,
Come on, is it really possible that there isn't some one out there that knows how to solve my property problem ?
My problem, has I've already stated is that I need to do this in an ActiveX Control.
MyClass is a COleControl
MyClass2 is CWnd derived and supports OleAutomation
All I want to do is have a property of MyClass point to MyClass2, that way any property and methods exposed by MyClass2 will be available has MyClass.SomeProperty.MyClass2PropertyOrMethod .
Come on, please, someone, anyone, I am running out of time and haven't been able to get this to work.
Thanks for any help.
----------------
Lord Phoenix
----------------
|
|
|
|
|
Hi,
even though I am not quite sure of what you really want to do, I try to give you a solution to what I "think" you want.
Make a "long" property, through which you can pass an object address to your ActiveX control.
Inside there (assuming you have included the header file describing your object to be refered) make a type cast and you have the pointer to your object.
SkyWalker
|
|
|
|
|
You're right, not exactly what I wanted, but it might actually work, haven't tried that yet.
Do you know the Treeview control ? You can type TreeView1.Nodes.Count which will return the number of existing nodes.
Although this really has nothing to do with it, the concept is the same.
I want whoever is using my control to access both the Control Class (MyClass) and a few other internal classes (MyClass2) in the same manner.
Using the TreeView example, MyControl is the TreeView, Nodes is the property which if it ever works will map (MyClass2) and Count is some property or method of MyClass2.
Hope this clarifies it. In a COM this is reasonably easy to achieve, but it seams I can't get it to work with an OCX.
Thanks for your help, if you think of anything else please do share.
Best regards,
----------------
Lord Phoenix
----------------
|
|
|
|
|
there are 2 ideas which can access an active control by another (activeX or normal app etc).
1. use pointer directly
2. use LoadLibraryEx() function
i can not remember actual code, u can find many samples on VC CD disk.
good luck
includeh10
|
|
|
|
|
Please see my reply to Mircea.
Thanks for your help and do feel free to share any other thoughts you feel might help.
Best regards,
----------------
Lord Phoenix
----------------
|
|
|
|