Thread: [Dev-C++] Couldn`t link MinGW DLL to MSVC program
Open Source C & C++ IDE for Windows
Brought to you by:
claplace
|
From: Dmitry S. <si...@si...> - 2005-03-27 09:40:28
|
Hello dev-cpp-users.
I have the following source files to build DLL with Dev-Cpp
// dll.h
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
class DLLIMPORT MyClass
{
public:
MyClass();
virtual ~MyClass(void);
};
#endif /* _DLL_H_ */
// dllmain.cpp
#include "dll.h"
#include <windows.h>
MyClass::MyClass()
{
MessageBox( NULL, "MyClass construccted!!!", "test", 0 );
}
MyClass::~MyClass()
{
}
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
This is standard DLL project of Dev-Cpp with MessageBox function in
MyClass constructor
I build DLL with Dev-Cpp and then build .LIB file by LIB.exe from the
MSVC installation.
lib.exe /machine:i386 /def:libhellodll.def
Then I create the following code in MSVC
// testdll.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "dll.h"
int _tmain(int argc, _TCHAR* argv[])
{
MyClass hello;
return 0;
}
I also add libhellodll.lib to MSVC project
But when my testdll is linking I got the following errors
testdll2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MyClass::MyClass(void)" (__imp_??0MyClass@@QAE@XZ) referenced in function _main
testdll2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall MyClass::~MyClass(void)" (__imp_??1MyClass@@UAE@XZ) referenced in function _main
testdll2 fatal error LNK1120: 2 unresolved externals
Then I tried to use dlltool from MinGW
dlltool.exe -d libhellodll.def --dllname hellodll.dll --output-lib libhellodll.lib
But I`ve got the same error
I also tried to use dlltool.exe with -U and -k flags, I`ve got the
same errors :(
Can anybody help me?
Excuse me for my poor english
--
Dmitry
|
|
From: Per W. <pw...@ia...> - 2005-03-27 10:26:11
|
It is possible to create DLL files exporting variables and functions -
using "C" naming convention and mix between gcc and M$. However, you can't
export/import classes or other C++ symbols (and often not structs either),
since the C++ mangling - and the internal memory layout - is different
between the compilers.
Google on ABI (Application Binary Interface) and you will get more
information about the problem.
/Per W
On Sun, 27 Mar 2005, Dmitry Sidorov wrote:
> Hello dev-cpp-users.
>
> I have the following source files to build DLL with Dev-Cpp
>
>
> // dll.h
> #ifndef _DLL_H_
> #define _DLL_H_
>
> #if BUILDING_DLL
> # define DLLIMPORT __declspec (dllexport)
> #else /* Not BUILDING_DLL */
> # define DLLIMPORT __declspec (dllimport)
> #endif /* Not BUILDING_DLL */
>
> class DLLIMPORT MyClass
> {
> public:
> MyClass();
> virtual ~MyClass(void);
> };
> #endif /* _DLL_H_ */
>
>
> // dllmain.cpp
> #include "dll.h"
> #include <windows.h>
>
> MyClass::MyClass()
> {
> MessageBox( NULL, "MyClass construccted!!!", "test", 0 );
> }
> MyClass::~MyClass()
> {
> }
> BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
> DWORD reason /* Reason this function is being called. */ ,
> LPVOID reserved /* Not used. */ )
> {
> switch (reason)
> {
> case DLL_PROCESS_ATTACH:
> break;
>
> case DLL_PROCESS_DETACH:
> break;
>
> case DLL_THREAD_ATTACH:
> break;
>
> case DLL_THREAD_DETACH:
> break;
> }
>
> /* Returns TRUE on success, FALSE on failure */
> return TRUE;
> }
>
> This is standard DLL project of Dev-Cpp with MessageBox function in
> MyClass constructor
>
> I build DLL with Dev-Cpp and then build .LIB file by LIB.exe from the
> MSVC installation.
>
> lib.exe /machine:i386 /def:libhellodll.def
>
> Then I create the following code in MSVC
> // testdll.cpp : Defines the entry point for the console application.
> //
> #include "stdafx.h"
> #include "dll.h"
>
> int _tmain(int argc, _TCHAR* argv[])
> {
> MyClass hello;
> return 0;
> }
>
> I also add libhellodll.lib to MSVC project
> But when my testdll is linking I got the following errors
>
> testdll2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MyClass::MyClass(void)" (__imp_??0MyClass@@QAE@XZ) referenced in function _main
> testdll2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall MyClass::~MyClass(void)" (__imp_??1MyClass@@UAE@XZ) referenced in function _main
> testdll2 fatal error LNK1120: 2 unresolved externals
>
>
> Then I tried to use dlltool from MinGW
> dlltool.exe -d libhellodll.def --dllname hellodll.dll --output-lib libhellodll.lib
>
> But I`ve got the same error
> I also tried to use dlltool.exe with -U and -k flags, I`ve got the
> same errors :(
>
> Can anybody help me?
> Excuse me for my poor english
>
> --
> Dmitry
>
>
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
> _______________________________________________
> Dev-cpp-users mailing list
> Dev...@li...
> TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
>
|
|
From: Gerson L. <ja...@ya...> - 2005-04-12 06:39:02
|
I have successfuly tested creating "dummy" dll with DEV-C++ 4.0 and using them in VisualBasic 6.0,
the thing is the famous namemangling, what I do is looking at a .def file that [i think] dllwrap
or dlltool creates in the same directory of the DLL. Finally, in VB I dont use the same name that
in my C code, instead, I Use the mangled names that I obtain from the .def file. May be that helps
just a little.
NOTE: this is valid for C code, if I try with C++ code [classes] the name mangling turns too
confusing for me...
Hope This Helps...
--- Per Westermark <pw...@ia...> escribió:
> It is possible to create DLL files exporting variables and functions -
> using "C" naming convention and mix between gcc and M$. However, you can't
> export/import classes or other C++ symbols (and often not structs either),
> since the C++ mangling - and the internal memory layout - is different
> between the compilers.
>
> Google on ABI (Application Binary Interface) and you will get more
> information about the problem.
>
> /Per W
>
> On Sun, 27 Mar 2005, Dmitry Sidorov wrote:
>
> > Hello dev-cpp-users.
> >
> > I have the following source files to build DLL with Dev-Cpp
> >
> >
> > // dll.h
> > #ifndef _DLL_H_
> > #define _DLL_H_
> >
> > #if BUILDING_DLL
> > # define DLLIMPORT __declspec (dllexport)
> > #else /* Not BUILDING_DLL */
> > # define DLLIMPORT __declspec (dllimport)
> > #endif /* Not BUILDING_DLL */
> >
> > class DLLIMPORT MyClass
> > {
> > public:
> > MyClass();
> > virtual ~MyClass(void);
> > };
> > #endif /* _DLL_H_ */
> >
> >
> > // dllmain.cpp
> > #include "dll.h"
> > #include <windows.h>
> >
> > MyClass::MyClass()
> > {
> > MessageBox( NULL, "MyClass construccted!!!", "test", 0 );
> > }
> > MyClass::~MyClass()
> > {
> > }
> > BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
> > DWORD reason /* Reason this function is being called. */ ,
> > LPVOID reserved /* Not used. */ )
> > {
> > switch (reason)
> > {
> > case DLL_PROCESS_ATTACH:
> > break;
> >
> > case DLL_PROCESS_DETACH:
> > break;
> >
> > case DLL_THREAD_ATTACH:
> > break;
> >
> > case DLL_THREAD_DETACH:
> > break;
> > }
> >
> > /* Returns TRUE on success, FALSE on failure */
> > return TRUE;
> > }
> >
> > This is standard DLL project of Dev-Cpp with MessageBox function in
> > MyClass constructor
> >
> > I build DLL with Dev-Cpp and then build .LIB file by LIB.exe from the
> > MSVC installation.
> >
> > lib.exe /machine:i386 /def:libhellodll.def
> >
> > Then I create the following code in MSVC
> > // testdll.cpp : Defines the entry point for the console application.
> > //
> > #include "stdafx.h"
> > #include "dll.h"
> >
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> > MyClass hello;
> > return 0;
> > }
> >
> > I also add libhellodll.lib to MSVC project
> > But when my testdll is linking I got the following errors
> >
> > testdll2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall
> MyClass::MyClass(void)" (__imp_??0MyClass@@QAE@XZ) referenced in function _main
> > testdll2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual
> __thiscall MyClass::~MyClass(void)" (__imp_??1MyClass@@UAE@XZ) referenced in function _main
> > testdll2 fatal error LNK1120: 2 unresolved externals
> >
> >
> > Then I tried to use dlltool from MinGW
> > dlltool.exe -d libhellodll.def --dllname hellodll.dll --output-lib libhellodll.lib
> >
> > But I`ve got the same error
> > I also tried to use dlltool.exe with -U and -k flags, I`ve got the
> > same errors :(
> >
> > Can anybody help me?
> > Excuse me for my poor english
> >
> > --
> > Dmitry
> >
> >
> >
> > -------------------------------------------------------
> > SF email is sponsored by - The IT Product Guide
> > Read honest & candid reviews on hundreds of IT Products from real users.
> > Discover which products truly live up to the hype. Start reading now.
> > http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
> > _______________________________________________
> > Dev-cpp-users mailing list
> > Dev...@li...
> > TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> > https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
> >
>
>
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
> _______________________________________________
> Dev-cpp-users mailing list
> Dev...@li...
> TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
>
______________________________________________
Renovamos el Correo Yahoo!: ¡250 MB GRATIS!
Nuevos servicios, más seguridad
http://correo.yahoo.es
|
|
From: Per W. <pw...@ia...> - 2005-04-12 07:12:26
|
The name of functions and variables is the smallest problem, since the
name mangling may be deactivated for functions you cant to export. The big
problem is trying to share classes. There, you also have the memory layout
of the members of the class, memory layout and location of the virtual
method table, ...
Besides that, you have problems with variable passing to functions
(possible to fix with STDCALL), implementation of exceptions,
implementation of new/delete, ...
In short - a HUGE number of obstacles for mixing C++ code from different
compilers.
/Per W
On Tue, 12 Apr 2005, Gerson Lara wrote:
> I have successfuly tested creating "dummy" dll with DEV-C++ 4.0 and using=
them in VisualBasic 6.0,
> the thing is the famous namemangling, what I do is looking at a .def file=
that [i think] dllwrap
> or dlltool creates in the same directory of the DLL. Finally, in VB I don=
t use the same name that
> in my C code, instead, I Use the mangled names that I obtain from the .de=
f file. May be that helps
> just a little.
> NOTE: this is valid for C code, if I try with C++ code [classes] the name=
mangling turns too
> confusing for me...
> Hope This Helps...
>
> --- Per Westermark <pw...@ia...> escribi=F3:
> > It is possible to create DLL files exporting variables and functions -
> > using "C" naming convention and mix between gcc and M$. However, you ca=
n't
> > export/import classes or other C++ symbols (and often not structs eithe=
r),
> > since the C++ mangling - and the internal memory layout - is different
> > between the compilers.
> >
> > Google on ABI (Application Binary Interface) and you will get more
> > information about the problem.
> >
> > /Per W
> >
> > On Sun, 27 Mar 2005, Dmitry Sidorov wrote:
> >
> > > Hello dev-cpp-users.
> > >
> > > I have the following source files to build DLL with Dev-Cpp
> > >
> > >
> > > // dll.h
> > > #ifndef _DLL_H_
> > > #define _DLL_H_
> > >
> > > #if BUILDING_DLL
> > > # define DLLIMPORT __declspec (dllexport)
> > > #else /* Not BUILDING_DLL */
> > > # define DLLIMPORT __declspec (dllimport)
> > > #endif /* Not BUILDING_DLL */
> > >
> > > class DLLIMPORT MyClass
> > > {
> > > public:
> > > MyClass();
> > > virtual ~MyClass(void);
> > > };
> > > #endif /* _DLL_H_ */
> > >
> > >
> > > // dllmain.cpp
> > > #include "dll.h"
> > > #include <windows.h>
> > >
> > > MyClass::MyClass()
> > > {
> > > MessageBox( NULL, "MyClass construccted!!!", "test", 0 );
> > > }
> > > MyClass::~MyClass()
> > > {
> > > }
> > > BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle=
=2E */ ,
> > > DWORD reason /* Reason this function is=
being called. */ ,
> > > LPVOID reserved /* Not used. */ )
> > > {
> > > switch (reason)
> > > {
> > > case DLL_PROCESS_ATTACH:
> > > break;
> > >
> > > case DLL_PROCESS_DETACH:
> > > break;
> > >
> > > case DLL_THREAD_ATTACH:
> > > break;
> > >
> > > case DLL_THREAD_DETACH:
> > > break;
> > > }
> > >
> > > /* Returns TRUE on success, FALSE on failure */
> > > return TRUE;
> > > }
> > >
> > > This is standard DLL project of Dev-Cpp with MessageBox function in
> > > MyClass constructor
> > >
> > > I build DLL with Dev-Cpp and then build .LIB file by LIB.exe from the
> > > MSVC installation.
> > >
> > > lib.exe /machine:i386 /def:libhellodll.def
> > >
> > > Then I create the following code in MSVC
> > > // testdll.cpp : Defines the entry point for the console application.
> > > //
> > > #include "stdafx.h"
> > > #include "dll.h"
> > >
> > > int _tmain(int argc, _TCHAR* argv[])
> > > {
> > > MyClass hello;
> > > return 0;
> > > }
> > >
> > > I also add libhellodll.lib to MSVC project
> > > But when my testdll is linking I got the following errors
> > >
> > > testdll2 error LNK2019: unresolved external symbol "__declspec(dllimp=
ort) public: __thiscall
> > MyClass::MyClass(void)" (__imp_??0MyClass@@QAE@XZ) referenced in functi=
on _main
> > > testdll2 error LNK2019: unresolved external symbol "__declspec(dllimp=
ort) public: virtual
> > __thiscall MyClass::~MyClass(void)" (__imp_??1MyClass@@UAE@XZ) referenc=
ed in function _main
> > > testdll2 fatal error LNK1120: 2 unresolved externals
> > >
> > >
> > > Then I tried to use dlltool from MinGW
> > > dlltool.exe -d libhellodll.def --dllname hellodll.dll --output-lib li=
bhellodll.lib
> > >
> > > But I`ve got the same error
> > > I also tried to use dlltool.exe with -U and -k flags, I`ve got the
> > > same errors :(
> > >
> > > Can anybody help me?
> > > Excuse me for my poor english
> > >
> > > --
> > > Dmitry
> > >
> > >
> > >
> > > -------------------------------------------------------
> > > SF email is sponsored by - The IT Product Guide
> > > Read honest & candid reviews on hundreds of IT Products from real use=
rs.
> > > Discover which products truly live up to the hype. Start reading now.
> > > http://ads.osdn.com/?ad_id=3D6595&alloc_id=3D14396&op=3Dclick
> > > _______________________________________________
> > > Dev-cpp-users mailing list
> > > Dev...@li...
> > > TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> > > https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
> > >
> >
> >
> >
> > -------------------------------------------------------
> > SF email is sponsored by - The IT Product Guide
> > Read honest & candid reviews on hundreds of IT Products from real users=
=2E
> > Discover which products truly live up to the hype. Start reading now.
> > http://ads.osdn.com/?ad_id=3D6595&alloc_id=3D14396&op=3Dclick
> > _______________________________________________
> > Dev-cpp-users mailing list
> > Dev...@li...
> > TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> > https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
> >
>
>
>
> ______________________________________________
> Renovamos el Correo Yahoo!: =A1250 MB GRATIS!
> Nuevos servicios, m=E1s seguridad
> http://correo.yahoo.es
>
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://ads.osdn.com/?ad_id=3D6595&alloc_id=3D14396&op=3Dclick
> _______________________________________________
> Dev-cpp-users mailing list
> Dev...@li...
> TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
>
|