Linking VS6.0 DLL to .Net 2003 - CString Error

S

sreenubkaimal

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..
 
D

David Wilkinson

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 !!

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
 
S

sreenubkaimal

Thanks for the help !!

David said:
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
 
S

sreenubkaimal

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
 
D

David Wilkinson

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.

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top