|
Do you have your lib for your dll linked into the app?
|
|
|
|
|
Yes. It's actually the DLL linking that's complaining. So I think I'm just not declaring my CCallback class correctly *within* the DLL code. Once I can get the DLL to understand how to call back, then I can work on getting my app to actually call into the DLL (I haven't even go there yet, probably doing this backwards).
|
|
|
|
|
You might need to app the .cpp to your dll project
|
|
|
|
|
Which has intimate knowledge of the app classes, which the DLL doesn't want to know about. So it'll never compile.
|
|
|
|
|
Yeah looks like callbacks might be the way to go.
|
|
|
|
|
Okay great. Now that we've established that, I'm stumped as to *how* to do a callback to a class in my main app from the DLL. Any sample code covering this would be extremely helpful.
Brad.
|
|
|
|
|
Hi ihave the following code
#include <afxole.h>
#include <afxwin.h>
#include <_dbdao.h>
#include <stdio.h>
void main()
{
}
I am getting the following errors
error C2079: 'CdbBSTR' uses undefined class 'DLLEXPORT'
c:\program files\microsoft sdk\include\_dbdao.h(77) : error C2239: unexpected token '{' following declaration of 'CdbBSTR'
c:\program files\microsoft sdk\include\_dbdao.h(95) : error C2146: syntax error : missing ';' before identifier 'CdbVariant'
Please can some one help me solve this issue
JK
|
|
|
|
|
netsharq wrote: #include <_dbdao.h>
Include dbdao.h instead.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
Getting the same error, but now number of erros have become more as
rror LNK2001: unresolved external symbol "public: __thiscall CdbBSTR::CdbBSTR(unsigned short *)" (??0CdbBSTR@@QAE@PAG@Z)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: struct IUnknown * __thiscall CdbOleObject::GetInterface(int,int)const " (?GetInterface@CdbOleObject@@QBEPAUIUnknown@@HH@Z)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CdbOleObject::OnInterfaceChange(void)" (?OnInterfaceChange@CdbOleObject@@UAEXXZ)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: __thiscall CdbOleObject::CdbOleObject(void)" (??0CdbOleObject@@QAE@XZ)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: class CdbOleObject & __thiscall CdbOleObject::operator=(class CdbOleObject &)" (??4CdbOleObject@@QAEAAV0@AAV0@@Z)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CdbOleObject::~CdbOleObject(void)" (??1CdbOleObject@@UAE@XZ)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CdbStaticCollection::Refresh(void)" (?Refresh@CdbStaticCollection@@UAEXXZ)
MFCExtnDLL.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CdbStaticCollection::
|
|
|
|
|
netsharq wrote: Getting the same error...
Actually you're not. Linker errors are hardly the same as compiler errors. You need to link with the appropriate DAO library (e.g., ddao35.lib).
See here.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
But i am going to link explicitly, so why should i include ddaoxxd.lib in settings?
|
|
|
|
|
netsharq wrote: ...why should i include ddaoxxd.lib in settings?
I never indicated you had to change your project's settings. I simply stated that you need to link with the appropriate DAO library. Whether you do that implicitly or explicitly is up to you.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
Sorry, if i have hurt you..
I mean, i tried using _dbdao.h
i gave the path which is available in c:\program files\common files\msvisualstudio\include\_dbdao.h
but still i get this linker error
|
|
|
|
|
netsharq wrote: Sorry, if i have hurt you..
I don't recall being hurt.
You seem to be very confused on the basics of C programming. #include is a preprocessor directive that pulls in the contents of the specified file, _dbdao.h in this case, as if those contents had appeared in the source program at the point where the directive appears. This has nothing to do with linking.
You can link in one of two ways: implicit (compile-time) or explicit (run-time). With implicit linking, you link to an import library (.LIB file). The OS loads the DLL when the executable using it is loaded. The executable calls the DLL’s exported functions just as if the functions were contained within the executable. With explicit linking, the executable using the DLL must call LoadLibrary() and GetProcAddress() to access the DLL’s exported functions. The executable must call the exported functions through a function pointer.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
OK.Agreed,
but when you explictly link using AfxLoadLibrary,
we have to mention the header file where the declarations of the functions available in DLL are present in our source program.
Can we explicitly link without including the header file.
|
|
|
|
|
netsharq wrote: but when you explictly link using AfxLoadLibrary,
we have to mention the header file where the declarations of the functions available in DLL are present in our source program.
Not normally.
netsharq wrote: Can we explicitly link without including the header file.
Yes, and this is usually the reason for doing so (when a .h file is not available).
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
i tried to typecast the following i am getting error
typedef CdbEngine* (*PFNCreateA1)();
|
|
|
|
|
netsharq wrote: i am getting error
Which is?
netsharq wrote: typedef CdbEngine* (*PFNCreateA1)();
My guess is it should be:
typedef CdbEngine* (PFNCreateA1)();
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
I have in a CDialog class:
protected:
afx_msg void OnDestroy();
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP()
};
Then I have
void CTargetInfo::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CRect cRect;
GetClientRect(&cRect);
if( NULL != m_listTgtInfo.GetSafeHwnd() )
{
m_listTgtInfo.MoveWindow(10, 10, cRect.Width()-15, cRect.Height() - 15);
}
}
but code never steps into this function even as I resize the CDialog in debug mode (breakpoint in function)
Am I missing some crucial step?
thanks,
sb
|
|
|
|
|
didn't you forget something like :
BEGIN_MESSAGE_MAP(CTargetInfo, CDialog)
ON_WM_SIZE()
END_MESSAGE_MAP()
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
Indeed I did.
Thanks for the pointer.
|
|
|
|
|
I finally finished my project. So I thought I would test it on a neighbours computers, just in case. And it doesn't work :'(
I have narrowed the problem down to the importing and initialising of an activeX dll. But I can't find out why it works on my machine and not on another (with identical configuration).
Here is the code:
_clsXLPtr xls;
try {
CoInitialize(NULL);
xls.CreateInstance(__uuidof(clsXL));
xls->Visible(&vis);
The CreateInstance call is failing, but why?
|
|
|
|
|
If the DLL registered on your neighbors computer?
Why is common sense not common?
Never argue with an idiot. They will drag you down to their level where they are an expert.
|
|
|
|
|
waldermort wrote: xls.CreateInstance(__uuidof(clsXL)); // failing
Had you bothered to check the return value of CreateInstance() , you would have likely seen it was -2147221164, which indicates a class has not yet been registered. You'll need to use regsvr32 for this.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
Thanks for the quick replies. Could you possibly explain why this works on my machine and not on others?
|
|
|
|