Please help me with this..
I have a DLL created in Visual C++ 6.0 ( VS 6.0 ).
I am trying to use this DLL in a new wrapper application written using
Visual Studio .net 2003 (C++ - MFC).
My DLL has many methods which uses CString as arguements and return
values.
At first, I got a Link error as
error LNK2019: unresolved external symbol "__declspec(dllimport)
public: static void __cdecl CTestCommon::SetName(class
ATL::CStringT<char,class StrTraitMFC_DLL<char,class
ATL::ChTraitsCRT<char> > >)"
(__imp_?SetName@CTestCommon@@SAXV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z)
referenced in function "public: void __thiscall
CWrapper2003Dlg::OnBnClickedTest(void)"
(?OnBnClickedTest@CWrapper2003Dlg@@QAEXXZ)
I found a KB article as
http://support.microsoft.com/kb/309801
As per this, i should add the following code to Stdafx.h
template class __declspec(dllimport) CStringT<TCHAR, StrTraitMFC<TCHAR,
ChTraitsCRT<TCHAR> > >;
template class __declspec(dllimport) CSimpleStringT<TCHAR>;
But even this is not solving my problem !! It s giving syntax error as
error C2059: syntax error : '<'
I dont know whether this is a silly mistake of mine.. But I am not able
to figure out any solution !!
PLease help...
Sree..
David Wilkinson - 18 Dec 2006 09:48 GMT
> Please help me with this..
>
[quoted text clipped - 31 lines]
> I dont know whether this is a silly mistake of mine.. But I am not able
> to figure out any solution !!
sreenubkaimal:
You cannot use a VC6 DLL with a VS2003 program, except under very
special circumstances. If you pass library (C++ standard or MFC) objects
there is no way it can work, because the corresponding classes may have
a different layout in the two library versions. CString was completely
changed in VS2002.
You will need to recompile your DLL in VS2003.
David Wilkinson
sreenubkaimal@gmail.com - 19 Dec 2006 00:36 GMT
Thanks for the help !!
> > Please help me with this..
> >
[quoted text clipped - 43 lines]
>
> David Wilkinson
sreenubkaimal@gmail.com - 19 Dec 2006 07:14 GMT
But if i recompile it in VS.net , will I b able to call the dll from a
wrapper written in VS 6.0 ?
I think i need to explain it ..
The main prob is that
1. The DLL can be created using .Net 2003 OR VS 6.0. (It should be an
MFC dll)
2. The DLL exposes classes and methods which uses CString.
3. Wrapper should be written in both .Net and VS 6.0 , for the same
dll.
Please help !!
Thanks a lot for all help..
Regards
Sreenu
> Thanks for the help !!
>
[quoted text clipped - 45 lines]
> >
> > David Wilkinson
David Wilkinson - 19 Dec 2006 11:25 GMT
> But if i recompile it in VS.net , will I b able to call the dll from a
> wrapper written in VS 6.0 ?
[quoted text clipped - 7 lines]
> 3. Wrapper should be written in both .Net and VS 6.0 , for the same
> dll.
The caller and the DLL have to use the same version of the compiler. So
if you want to use the DLL from both a VC6 caller and a VS2003 one, you
need two versions of the DLL.
David Wilkinson