|
I took the best option out.
Asked my colleague to manually type the table design into word
She finished in 30 mins.
Nice of her I say
Nish
I am looking for a free racing game. Old style racing game without any complicated 3D stuff. Around 4 MB download. If anyone has such a game, please inform me.
|
|
|
|
|
It works, but only if you have toy database with small number of tables.
Tomasz Sowinski -- http://www.shooltz.com ** If you're going to rape, pillage and burn, be sure to do things in that order. **
|
|
|
|
|
Tomasz Sowinski wrote:
It works, but only if you have toy database with small number of tables
Yeah.
This one had only 6 tables each with 6-7 fields
Nish
I am looking for a free racing game. Old style racing game without any complicated 3D stuff. Around 4 MB download. If anyone has such a game, please inform me.
|
|
|
|
|
If its that urgent, try just using Print Screen to capture the screen.
On the relationships screen (which kind of shows table design) there is a "Print Relationships..." item in the File menu. It didnt work for me, but it might work for you.
--
David Wengier
Sonork ID: 100.14177 - Ch00k
|
|
|
|
|
David Wengier wrote:
try just using Print Screen to capture the screen.
Not very useful.
Cause I wont get all the field properties.
I'll only get field properties for the currently selected field
Nish
I am looking for a free racing game. Old style racing game without any complicated 3D stuff. Around 4 MB download. If anyone has such a game, please inform me.
|
|
|
|
|
Access used to let you print the table layout via the Tools->Analysze->Documentor menu option. It's been a few years since I last tried it, so it might have moved.
You could write a quick app using ADOX to get the table structure. I think there is a good example on MSDN.
Michael
|
|
|
|
|
Hi,
I want to pass a metafile to my com server using IDataObject, in my MFC client App I do this:
IDataObjectPtr DataObj;
DataObj = pBaseMeta;
if(DataObj) {
FORMATETC Fe;
Fe.cfFormat = CF_ENHMETAFILE;
Fe.ptd = NULL;
Fe.dwAspect = DVASPECT_CONTENT;
Fe.lindex = -1;
Fe.tymed = TYMED_ENHMF ;
STGMEDIUM Medium;
Medium.tymed = TYMED_ENHMF;
Medium.hEnhMetaFile = hMeta;
HRESULT hr = DataObj->SetData(&Fe, &Medium, TRUE);
}
and in my COM Server ( full ActiveX ctrl that inherits from IDataObjectImpl), I override the SetData method:
STDMETHODIMP CSCurveMeta::SetData(FORMATETC *pFormatetc, STGMEDIUM *pmedium, BOOL fRelease)
{
if(pFormatetc->cfFormat != CF_ENHMETAFILE) {
::MessageBox(NULL, ":-((", ":-(( No metafile...", MB_OK);
return E_NOTIMPL;
}
if(pmedium->hEnhMetaFile != NULL) {
}
return S_OK;
}
But that method is never executed ( the call of SetData made in the MFC client app makes nothing...).
What I´m doing wrong ?, Thanks in advance, Bye !
Braulio
|
|
|
|
|
Braulio,a obvious question do you tried to step in setData in the client ?
HRESULT hr = DataObj->SetData(&Fe, &Medium, TRUE);
what hr displays ?
Tip , in the watch varibles format the hr variable as hr, hr . Add the virgul then the format specifier hr what hr displays ... E_NOTIMPL ?
Or Simply add this @EAX,hr -> the eax register holds the return value of functions and adding hr , format the variable to show the message instead of a hex or decimal number ... it's like calling error lookup
Joao Vaz
|
|
|
|
|
Hi Joao !
I tried that but it doesn´t enter there, HResult returns 0xC0...05 "Access Violation". I created a Dummy project ( and compiled and registered the PStub DLL and tried the same and it gave the same error message).
The only special thing is that the DLL is in the same process space than Ms Word, but my application ( from where I handle the ActiveX), is in a different process space.
I don´t know what I´m making wrong, I've tried making a method and saving to an stream the metafile, then instead of passing the IStream pointer, make a cast from HGlobal to VT_I4 and in the ActiveX, make a casting again to HGlobal, then get the stream from there, but it didn´t work as well...
I´m tempted to use some classic stuff.... Named Pipes or things like that I know they really work...
Braulio
|
|
|
|
|
By the way Joao
I´m trying to pass the HGlobal handler to my ActiveX, the problem is that there is no type for that in OleAutomation, the most similar thing is VT_I4, is ok to use that? I mean casting to VT_I4 and in the ActiveX back to HGlobal ?
Thanks !
Braulio
|
|
|
|
|
HGLOBAL ???
HGLOBAL is a Handle and in win32 is a void* , so you must pass a pointer , not VT_I4.
Joao Vaz
|
|
|
|
|
Hi,
Yes, but to conform with IDL and OleAutomation definition types, could I use (void *)? Or will it give me a warning saying that is not an OleAutomation valid type ?
Braulio
|
|
|
|
|
F*** ! You can't pass a void* , damn it, it was my fault. Here is the automation data types you can pass:
boolean -> Data item that can be true or false; size of unsigned char
unsigned char -> 8-bit unsigned data item
double -> 64-bit IEEE floating-point number
float -> 32-bit IEEE floating-point number
int Integer -> size is system dependent (MIDL treats int as a 32-bit signed integer on 32-bit systems)
long -> 32-bit signed integer
short -> 16-bit signed integer
BSTR -> Length-prefixed string
CY -> 8-byte fixed-point number (formerly CURRENCY)
DATE -> 64-bit floating-point fractional number indicating number of days since December 31, 1899
SCODE -> Built-in error type that corresponds to HRESULT
enum -> Signed integer size is system dependent
IDispatch* -> Pointer to IDispatch interface (VT_DISPATCH)
IUnknown* -> Pointer to an interface that is not derived from IDispatch (VT_UNKNOWN) any interface can be represented by its Iunknown interface)
SAFEARRAY (TypeName) -> Array of TypeName that can be any of the above types
TypeName* -> Pointer to TypeName that can be any of the above types
Joao Vaz
|
|
|
|
|
Thanks for the list Joao, then I have to forget about HGlobal ?, I thought HGlobal could be used by any application, in any place...
It seems that the things are getting harder... I tried to use an Exe server that could hold the ActiveX, but then Word doesn´t like it and says me that he didn´t found the control :´-(...
I tried to Marshal the "IPicture" interface as well, and no success...
The streams things on global memory didn´t work as well...
And the proxy/stub dll, not as well ( maybe is because my app has a proxy to access word and Word takes directly the dll).
Only left to try to paste it in the clipboard and get it from there ( Hey ! Microsoft makes it really cool !.... ).
AAAAH ! Someday I will 100 %crazy (now I´m 99 %)
|
|
|
|
|
How are you automating ?
Hwre it goes a snippet of code of a sample app that automates word:
// Office.h
#define Uses_MSO2000
#pragma warning(disable:4146)
#ifdef Uses_MSO2000
// for MS Office 2000
#import "D:\Program Files\Microsoft Office\Office\MSO9.DLL"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "D:\Program Files\Microsoft Office\Office\MSWORD9.OLB" \
rename("ExitWindows","_ExitWindows")
#import "D:\Program Files\Microsoft Office\Office\EXCEL9.OLB" \
rename("DialogBox","_DialogBox") \
rename("RGB","_RGB") \
exclude("IFont","IPicture")
//#import "D:\Program Files\Common Files\Microsoft Shared\DAO\DAO360.DLL" \
// rename("EOF","EndOfFile") rename("BOF","BegOfFile")
//#import "D:\Program Files\Microsoft Office\Office\MSACC9.OLB"
#else
// for MS Office 97
#import "D:\Program Files\Microsoft Office\Office\MSO97.DLL"
#import "D:\Program Files\Common Files\Microsoft Shared\VBA\VBEEXT1.OLB"
#import "D:\Program Files\Microsoft Office\Office\MSWORD8.OLB" \
rename("ExitWindows","_ExitWindows")
#import "D:\Program Files\Microsoft Office\Office\EXCEL8.OLB" \
rename("DialogBox","_DialogBox") \
rename("RGB","_RGB") \
exclude("IFont","IPicture")
//#import "D:\Program Files\Common Files\Microsoft Shared\DAO\DAO350.DLL" \
// rename("EOF","EndOfFile") rename("BOF","BegOfFile")
//#import "D:\Program Files\Microsoft Office\Office\MSACC8.OLB"
#endif
#pragma warning(default:4146)
-----------------------------------------------------------------------------
// test.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <stdio.h>
#include "Office.h"
void main()
{
::CoInitialize(NULL);
try {
using namespace Word;
_ApplicationPtr word;
word.GetActiveObject(L"Word.Application");
if (word == 0) {
word.CreateInstance(L"Word.Application");
word->Documents->Open(&_variant_t("c:\\myfile.doc"));
}
word->Visible = true;
word->Activate();
_DocumentPtr doc = word->ActiveDocument;
Word::HeaderFooterPtr foot =
doc->Sections->Item(1)->Footers->Item(wdHeaderFooterPrimary);
foot->Range->Text = "My program";
} catch (_com_error& er) {
char buf[1024];
sprintf(buf,"_com_error:\n"
"Error : %08lX\n"
"ErrorMessage: %s\n"
"Description : %s\n"
"Source : %s\n",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));
printf(buf);
}
::CoUninitialize();
Hope this helps ??????????
Joao Vaz
|
|
|
|
|
the missing include is #include <stdio.h>
Joao Vaz
|
|
|
|
|
Other basic question,Have your sure that your CreateInstance is something like this :
HRESULT hr=CoCreateInstance(CLSID_Something, CLSCTX_SERVER, NULL, IID_IDataObject, (void *)&m_pIDataObjImage);
It seems that your idataobject pointer is illegal ? you checked the value ?
Joao Vaz
|
|
|
|
|
Hi,
The bad thing is that to add the ActiveX to word I have to create it calling the automation method:
m_pWord->GetSelection()->InlineShapes->AddOLEControl(vClassType);
But I will try that in a dummy program and see if it returns the right pointer.
Braulio
|
|
|
|
|
Hi Joao !
The problem with all the picture stuff, was finally that my object used msxml as well,and I had a problem with the versions... ( DLL Hell with this MsXML), I remove the entries for the XML and it seems that it works fine... ( so the article that I wrote is still right )
Thanks Joao for all your help!
Braulio
|
|
|
|
|
Usted no tiene qué
(I hope this make sense )
Cheers,
Joao Vaz
|
|
|
|
|
hi,
i have some vc++ managed code and i cuse it from c#~, but there is some functions that takes a parameter by reference, the functions declarations shows like that
bool GetValorDouble (LONG lVarId, double &dValue)
when i try to use it in c# the function requires i pass a double* parameter.
now i see two possible solutions, but i have no solutions for none.
a) the way to pass parameter from c# (pass a double*)
b)modify the function in vc++, so i can pass in a simple way a double in c#.
I am with this problem a lot of days and i don't see nothing similar in the net.
Any Idea is welcome, thanks a lof in advance, and sorry my english.
|
|
|
|
|
Try putting the call in an unsafe block
Nish
I am looking for a free racing game. Old style racing game without any complicated 3D stuff. Around 4 MB download. If anyone has such a game, please inform me.
|
|
|
|
|
Hi,
I'm doing a web project which requires a way to send a huge number of emails to subscribers (like a mailinglist). and this point is very important : mails must be sure to be sent.
I now write a C++ app. on Windows 2000 server, use CDONTS component to send mail. this is very convenient, but i faced a problem : CDONTS relies on SMTP service of IIS, and in pretty poor internet connection, IIS's SMTP service seems stucked for pretty long and seems not reliable.
Do you have any better solutions ? many thanks
trieuhainguyen@pyramid-consulting.com
|
|
|
|
|
Ok I know how one function can write multiple lines with \r\n but I want multiple functions writing to one edit box with no previous data being overwritten. for example I have a dialogbox with two buttons and an edit box.
When the first button is clicked:
CString S1 = "William Jefferson";
CString S2 = "Bill Clinton";
m_Multilines.Format( "%s\r\n%s", S1, S2);
UpdateData(FALSE);
And when the second button is clicked I want to display another string underneath this one but I can never do it without erasing the previous data, can someone please help me to implement this correctly?
comimh
|
|
|
|
|
UpdateData(TRUE);
m_Multilines += "\r\nAnother line";
UpdateData(FALSE);
Tomasz Sowinski -- http://www.shooltz.com ** If you're going to rape, pillage and burn, be sure to do things in that order. **
|
|
|
|