用vc6.0创健dll时发现了一个bug
选择win32dynamic-link libary
然后选择 A dll that exports some symbols创建一个工程
用这种方法生成的dll不能使用,因此编译器在生成dll的时候
莫名其妙的给每个函数前加上了一些字符
比如你写的Dll里面有一个函数GetName(),生成的Dll里面函数名
会变成??GetName()之类的名字,这样在调用GetProcAddress时就会出错
不知道有没有 人知道其解决方法

解决方案 »

  1.   

    这不是Bug,编译器会将导出函数编译为C++、C...等等下的函数。
      

  2.   

    你可以用相关工具如Editplus或depend打开dll,找到该外部函数名,连同这些乱七八糟的字符一并复制到调用的函数名位置,如: GetProdcessAderss(hInstance,"此处为带有乱七八糟的字符函数名");
      

  3.   

    这不是bug,如果把dll写成纯资源的形式就可以避免了
      

  4.   

    一般显式链接DLL和使用DLL中函数的例子:
    1.DLL中有如下函数:
    void Initialize()
    {
       AfxMessageBox(_T("Hello!"));
    }
    2.EXE中调用:
    HMODULE hDll = LoadLibrary(mydll.dll);
    ASSERT(hDll);
    typedef void(*FUN)();
    FUN pfun;
    pfun = (FUN)GetProcAddress(hDll , "Initialize");// 通过函数名称,得到函数地址if(!pfun)
    {
    AfxMessageBox(_T("函数地址为空!"));
    return;
    }
    else
    {
    (*pfun)(); // 调用Initialize函数
    }