在VC.NET下做了一个DLL,大致过程如下:新建项目--WIN32项目--DLL。然后在其中随便写了个小函数,比方说GetContent();生成一个DLL文件,一个LIB文件再生成一个WIN32项目,并在其中调用上面的DLL,如果是动态加载(LoadLibrary())则一切正常。但如果是在装入时加载(已将LIB文件加入到项目中)则链接时报错,大意是找不到名为__imp__GetContent的符号。请教高人这是怎么回事!

解决方案 »

  1.   

    我是这样做的,没有问题,你是怎么写的?
    exe中:
    extern "C" __declspec(dllexport) 
    LRESULT CALLBACK KeyboardProc(
    int nCode,       
    WPARAM wParam,    LPARAM lParam  )
    {
    char m_SysDir[128];
        GetSystemDirectory(m_SysDir,128);
    ......
    }
    dll 中:
    extern "C" __declspec(dllimport) 
    LRESULT CALLBACK  KeyboardProc
    (int nCode, WPARAM wParam, LPARAM lParam);
      

  2.   

    我很你差不多,只是我的函数返回值是void,没有用LRESULT CALLBACK  修饰与这有关吗
      

  3.   

    你所遇到的问题,主要是要注意一些关于DLL的输出约定
    一个是函数参数传入顺序的约定是,和CALLBACK有关
    一个是输出函数名的格式,和extern "C"有关你可以把你的代码贴出来
    帮你改
      

  4.   

    DLL中函数应该
    extern "C" __declspec(dllexport) 
    LRESULT CALLBACK  KeyboardProc
    (int nCode, WPARAM wParam, LPARAM lParam);
    EXE
    extern "C" __declspec(dllimport) 
    LRESULT CALLBACK  KeyboardProc
    (int nCode, WPARAM wParam, LPARAM lParam);
    还要在Project ->settings->Link ->Object/Library Modules中填入与DLL一起生成的LIB名称或者
    在文件头写入以下代码#pragma comment(lib,"DLL一起生成的LIB名称")
    DLL一起生成的LIB放在工程目录下
      

  5.   

    @@@@@@@@@@@@@@@@@@一个是函数参数传入顺序的约定是,和CALLBACK有关
    一个是输出函数名的格式,和extern "C"有关@@@@@@@@@