开发者

Unresolved externals when compiling code which uses a dll

I'm trying to get started on using dll's for my code in VS 2005. The code I have is very simple, just to try a test case.开发者_JAVA百科

testdll.h:

#ifdef TEST_EXPORTS
#define TESTDLLPORT   __declspec( dllexport )
#else
#define TESTDLLPORT   __declspec( dllimport )
#endif

namespace TestDLLNS
{
    static int s = 0;
    class MyTestDll {
    public:
        static TESTDLLPORT int printDLLFuncs();
    };
}

testdll.cpp:

// testdll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "testdll.h"

#ifdef _MANAGED
#pragma managed(push, off)
#endif

namespace TestDLLNS {
    int MyTestDll::printDLLFuncs() {
        cout << "DLL function called" << endl;
        return s;
    }
}
#ifdef _MANAGED
#pragma managed(pop)
#endif

test.cpp:

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "testdll.h"

int main(int argc, char* argv[])
{
    cout << "int: " << TestDLLNS::MyTestDll::printDLLFuncs() << endl;
    cout << "Called dll" << endl;
    return 0;
}

Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static int _cdecl TestDLLNS::MyTestDll::printDLLFuncs(void)" (_imp_?printDLLFuncs@MyTestDll@TestDLLNS@@SAHXZ) referenced in function _main test.obj

dumpbin \exports testdllD.dll gives the following: ordinal hint RVA name

      1    0 0001105F ?printDLLFuncs@MyTestDll@TestDLLNS@@SAHXZ

So the symbol clearly exists in the .dll. Should Visual Studio also be creating a testdllD.lib files which I should be linking with test.cpp? If so, how I get visual studio to make both a .dll and a .lib.

Edit: Am I doing the importing/exporting correctly? From what I understand, whem compiling the dll you would want to use dllexport while when compiling the executable which uses the dll, dllimport would be used.


There are few things to note and I hope you did not miss them.

  1. What you have is a linking error, means that your compiling was okay, but there is a link error. The error shows that the linking does not find a definition for your printDLLFuncs() function which was referenced in the object file.
  2. You either have to provide the path for the .lib file where the function is defined in the Project Directories -> library path, or put it in any of the project folders so your Visual Studio can find it.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜