高手指点一下,很简单了:
   我想在dll中声明一个函数,在exe中调用,做createthread()的参数创建线程,createthread()要求函数声明为DWORD WINAPI function(LPVOID param)形式,这样做对不对?在dll中:
extern "C" _declspec(dllexport) DWORD WINAPI proc(LPVOID p)
{
return 0;
}在exe中
typedef DWORD (WINAPI *fun)(LPVOID);
HMODULE handle=loadLibrary("mydll.dll");
fun myProc=GetProcAddress(handle,"proc");
CreateThread(0,0,myProc,0,0,0);可是GetProcAddress()得到的myProc为空,GetLastError()返回127--找不到函数,
不知道为什么,而我不用LoadLibrary(),直接连接dll的lib文件,就没问题,
哪位指点一下,多谢

解决方案 »

  1.   

    typedef DWORD (*fun)(LPVOID);
      

  2.   

    use depends to confirm real export function name.the best way to make sure to exported the supported name is 
    add xxx.def file to dll project.in xxx.def 
    write like following:EXPORTS
      procthen every will be ok.
      

  3.   

    to  masterz() :按你说的也不行呀?zdhe(zdhe) :我想试试用getprocaddreess(),不知道有什么办法?
      

  4.   

    to zdhe(zdhe) :.def文件怎么弄呀?
      

  5.   

    设你的dll名字为a.dll
    命令行运行dumpbin a.dll /exports
    找到proc函数分裂后的名字(大概是_proc@4)用这个名字再去getprocaddress。有一点要注意的,你的dll要用multithread编译。
    并且exe里面最好不要使用createthread(),而是使用_beginthreadex()
      

  6.   

    方法1、
    是由于你的dll里道出的函数名称不是proc 而是 类似这样的@proc$qpcit一个东西,具体的那容请用 vc里的工具depends 查看。然后把proc替换就可以了。
    方法2、
    建立一个.def文件,然后加入到工程中
    在此文件中写上SECTIONS
       proc     @1
    即可。同时把proc修改
    DWORD WINAPI proc(LPVOID p)
    {
    return 0;
    }