演示了一下DLL的封装和载入,但是在GetProcAddress的时候,得到的地址老是0,不知道为什么,哪位达人给指点一下,先谢谢了啊!
//testDll2.h
#define EXPORT extern "C"
EXPORT int WINAPI test();//testDll2.cpp
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}EXPORT int WINAPI test()
{
    cout<<"ok"<<endl;
    return 1;
}//testDll2.def
library "testDll2.dll"
DESCRIPTOIN "FDS"
EXPORTS
test @1//TEST.CPP
typedef int (WINAPI * TEST) ();
int _tmain(int argc, _TCHAR* argv[])
{
    HINSTANCE hLibrary;
    TEST ptest;
         hLibrary = LoadLibrary(TEXT("testDll2.dll"));
    ptest = (TEST) GetProcAddressA(hLibrary,_T("test"));
}

解决方案 »

  1.   

    先用pe工具查看DLL导出的函数名是不是test
      

  2.   

    你先看看hLibrary 这个是不是返回的是空啊,如果这个都是空,那问题就出在你的DLL,
    如果hLibrary这个不是空,那就是你的导出函数有问题。
    写程序出了问题要保持冷静的心态,不要烦躁,这样就可以一步一步的把问题找出来。(自己的一点体会)
      

  3.   

    发现了一个问题:我将WINAPI去掉就成功,加上了就失败。还有:我的hLibrary是正常的呀。
      

  4.   

    MSDN中的dll export帮助中,导出函数是不用winapi定义的。以后这样的问题应该自已去看MSDN
      

  5.   

    你的程序应该是没问题的。有可能是编译或者连接的方式不对。
    你要检查一下编译和连接的参数。
    还有,就是要确保LoadLibrary装入的是正确的DLL。如果你硬盘上有多个DLL,有可能装错。
    你可以是一下用绝对路径。
      

  6.   

    用Depands看一下你的DLL是否正确,
    Depands在你的Visual Studio的 Tools里面
      

  7.   

    to:zhiyuan0001,MSDN有这一条吗?我找不到啊,而且我看了很多其他人的DLL也都是用了WINAPI定义的,再说参数的压栈形式我觉得是不影响DLL的函数到处的吧。
    to:nelsonc,我编译和连接一直都是用VS的IDE的,不知道针对DLL,编译和连接的参数应该怎么调整呢?
    to:darkread,我用的是vs.net,好象找不到depands?