已知dll里面有一个函数的原型是
procedure SetThread( Handle: THandle; NumTimes: Word)现在我用extern "C" void __stdcall SetThread(unsigned long,unsigned short);做声明但是去调用SetThread()的时候发生了link2001错误
error LNK2001: unresolved external symbol _SetThread@8看来是vc++把我的函数声明中的参数大小当成8了
实际的参数大小应该是6请问怎么解决这个问题?

解决方案 »

  1.   

    extern "C" void __stdcall SetThread(UINT long,unsigned short);
      

  2.   

    这种方法不行,需要LIB文件。
    采用Loadlibrary与Getprocaddress吧。
      

  3.   

    楼上的,UINT long类型跟unsigned long用在这里是一样效果吧我已经自己做了lib文件
    是用vckbase上的方法用def文件生成的lib
    已知dll里面的函数原形是procedure SetThread( Handle: THandle; NumTimes: Word)然后我自己写的.h文件,其中这个函数被声明为extern "C" void __stdcall SetThread(unsigned long,unsigned short);到我实际调用这个函数的时候,它把实参的总长度当成8了,本来应该是4+2=6才对啊
    所以发生link错误,提示说找不到函数 _SetThread@8,因为lib里面函数符号中的参数大小是6这种情况该怎么办?
      

  4.   

    typedef void _stdcall PROCSETTHREAD(unsigned long,unsigned short)HINSTANCE hHandle = LoadLibrary("..//***.dll");
    PROCSETTHREAD *pSetThread = 
       (PROCSETTHREAD *)GetProcAddress(hHandle, "SetThread");
    (*pSetThread)(..., ...)
    ...
    FreeLibrary(hHandle);^_^ 参考 <VC 技术内幕5> Page.511
      

  5.   

    如果我想隐式(即静态)的调用这个dll
    可以吗?
    是不是一定要动态调用?