|
Thanks for ur valuble response...
it improved than before but font looks a bit smaller than the font which i have modified manually....
both doesn"t looks exactly similar....
|
|
|
|
|
anybody please try to help me....
|
|
|
|
|
Hi all,
I've beating this around for a few days now and I'm totally lost.
I was given a DLL written in VB by a client with the idea of instantiating a class and calling some of the methods. I created a small test app (from code I found here) and attempted to use CoCreateInstance. This worked fine in the code shown below. The client then gave me a more up-to-date version of the DLL and with this new version, CoCreateInstance failed with a E_NOINTERFACE.
I've gone back and forth with the client about this and they have said that it was compiled with the same compiler (really old was the comment) and that all that was changed with the new release was couple of lines of code. They said they had recompiled the DLL under the highest compatibility. A couple of years has gone by since releases, so there may be underlying OS changes, if that would make a difference. They have said they have other users using the DLL without issues, though perhaps not with C/C++.
I modified the code so that instead of using CoCreateInstance, it uses CoGetClassObject and CreateInstance. CreateInstance fails with E_NOINTERFACE, the same error.
I would appreciate all help in understanding how to debug this, bearing in mind that I'm unfamiliar with COM.
This is a snippet from stdafx.h:
#import "TTExt.dll" no_namespace
This is a snippet from the area where I do the CoCreateInstance:
void CVCClientDlg::OnButton1()
{
HRESULT hresult;
CLSID clsid;
CoInitialize(NULL);
hresult=CLSIDFromProgID(OLESTR("TTExt.WebRes"), &clsid);
if(FAILED(hresult))
{
switch (hresult) {
case CO_E_CLASSSTRING:
AfxMessageBox("CLSID Failed -- registered CLSID for the ProgID is invalid");
break;
case REGDB_E_WRITEREGDB:
AfxMessageBox("CLSID Failed -- error occurred writing the CLSID to the registry.");
break;
default:
AfxMessageBox("CLSID Failed -- unknown reason");
break;
}
}
_WebRes *wr;
IClassFactory *pCF;
hresult=CoGetClassObject(clsid, CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pCF);
hresult = pCF->CreateInstance(NULL, __uuidof(_WebRes), (LPVOID *)&wr);
if(FAILED(hresult))
{
switch (hresult) {
case REGDB_E_CLASSNOTREG:
AfxMessageBox("Creation Failed -- Class not registered");
break;
case CLASS_E_NOAGGREGATION:
AfxMessageBox("Creation Failed -- class cannot be created as part of an aggregate.");
break;
case E_NOINTERFACE:
AfxMessageBox("Creation Failed -- class does not implement the requested interface");
break;
case E_POINTER:
AfxMessageBox("Creation Failed -- ppv parameter is NULL");
break;
default:
AfxMessageBox("Creation Failed -- unknown reason");
break;
}
return;
}
bool bCon = wr->Connect("GEX", "");
if (bCon)
MessageBox("Connect Succceded\n");
else
MessageBox("Connect Failed **********\n");
wr->Release ();
CoUninitialize();
}
This is a snippet from the top of the .tlh file:
#pragma once
#pragma pack(push, 8)
#include <comdef.h>
struct __declspec(uuid("f5171c2c-b846-47bc-8c7f-19658cfc0086"))
__TTExt;
struct __declspec(uuid("787d47a3-020f-4b1f-912e-003523277942"))
_WebRes;
struct WebRes;
_COM_SMARTPTR_TYPEDEF(_WebRes, __uuidof(_WebRes));
struct __declspec(uuid("787d47a3-020f-4b1f-912e-003523277942"))
_WebRes : IDispatch
{
I did a comparison of the .tlh files from the two different versions of the DLL and this is the result:
Compare: (<)C:\Documents and Settings\phild\My Documents\Visual Studio Code\VBDll\VCClient\Debug\tmp\v7.ttext.tlh (10755 bytes)
with: (>)C:\Documents and Settings\phild\My Documents\Visual Studio Code\VBDll\VCClient\Debug\tmp\v6.ttext.tlh (10755 bytes)
6c6
<
---
>
17,19c17,19
< struct __declspec(uuid("e897466c-75b0-459f-9512-21d42e1f5703"))
< __TTExt;
< struct __declspec(uuid("dc8718c4-d07f-4542-a799-f2015a0614cf"))
---
> struct __declspec(uuid("f5171c2c-b846-47bc-8c7f-19658cfc0086"))
> __TTExt;
> struct __declspec(uuid("787d47a3-020f-4b1f-912e-003523277942"))
33c33
< struct __declspec(uuid("dc8718c4-d07f-4542-a799-f2015a0614cf"))
---
> struct __declspec(uuid("787d47a3-020f-4b1f-912e-003523277942"))
311c311
< struct __declspec(uuid("d00de9f1-98eb-4cd9-8685-0ea4f283971f"))
---
> struct __declspec(uuid("0cab506a-1b4d-473f-9a8b-051277ae5603"))
modified on Friday, June 26, 2009 2:32 PM
|
|
|
|
|
Did you unregister the previous DLL and register the new one?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi Pallini,
Thank you for responding.
Yes, in fact I can unregister the old DLL, register the new DLL, try the test code and it will fail. I can then unregister the new DLL and register the old DLL and it will work fine.
Other ideas?
|
|
|
|
|
BeerFizz wrote: hresult=CLSIDFromProgID(OLESTR("TTExt.WebRes"), &clsid);
BeerFizz wrote: hresult = pCF->CreateInstance(NULL, __uuidof(_WebRes), (LPVOID *)&wr);
Have you done, using the debugger, a constistency check between clsid and __uuidof(_WebRes) ?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
|
|
Actually this picture shows that there is consistency.
Can you get an instance of the object via, for instance, OleView tool?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
|
Hey, wait a moment. The code snippet of tlh file you provided in your OP is relative to the old DLL. I hope you aren't using it.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
C.Palinni, you are a genius!!! That was the issue!
You know, at some point I had thought of that but obviously screwed it up. You would think that after the multitude of compiles I've done, registers and unregisters that at some point I would have lucked on the right combination.
Thank you so much for your help, it is very much appreaciated,
Best Regards
Phil
|
|
|
|
|
You're welcome.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I can not refresh the forms of my application when I execute the .exe file. Whether I click over my application then the screen seens to be frozen...same result if I do soemthing with another application like web browser...I've tried with refresh() and bringtofront() methods but it doesn't work.
I would really apreciate if someone could tell me how to keep the forms updated when it is running...
c u soon...
David
|
|
|
|
|
David21u2 wrote: I would really apreciate if someone could tell me how to keep the forms updated when it is running...
How did you initially populate them?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Hi,
Thanks a lot for your help...
My issue is the following...when I'm running the .exe file... any further action I do with the mouse, lets say open another application or even click over my application cause that the screen gets frozen...i've added refresh() and Bringtofront() methods but they only work whether I run the application from the Builder IDE...
tks in advance for your help...
dg
|
|
|
|
|
David21u2 wrote: ...cause that the screen gets frozen...
Instead of what? Is your application doing something at that point?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Yeah,
The application is a cellular networks simulator; some simulations are really heavy computationally speaking that the system I think is unable to refresh the graphical interface...but the curious thing is that only the app's screen gets frozen because the simulation itself keeps working properly; I've verified it because once the overall simulation process finishes then the application screen returns.
I've viewed some articles refering to threads but I have no idea how to use them...maybe there is another way !!
c u,
dg
|
|
|
|
|
David21u2 wrote: ...some simulations are really heavy computationally speaking that the system I think is unable to refresh the graphical interface...I've verified it because once the overall simulation process finishes then the application screen returns.
Put these computations into a worker thread.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
well,
could you give me please additional insight how to do that...i've never use such threads so a tutorial or maybe a sample file could be useful...
: )
tks
dg
|
|
|
|
|
See here.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
tks a lot for your help...I'm gonna go over that inmediately...
c u around..
dg
|
|
|
|
|
maybe your frequent refresh leads to the frosen, try to create a thread to refresh
|
|
|
|
|
hi,
do ou have a sample code showing how to do that...
I've never used threads and I found it a bit complicated...
well, tks a lot for your help...
c u around,
dg
|
|
|
|
|
Multithreading Tutorial[^]
you can download the code here,although it isn't in c++ builder. It is written by api, hope it helpful.
anyway, i think the code in msdn is also valuable.
|
|
|
|