一般情况下VC的编译器会将引出的函数的名字改掉如
Commportopen --> _Commportopen@?之类的写法!
在工程中用.def文件,而不是使用__declspec(dllexport)即可!

解决方案 »

  1.   

    你用int _stdcall Commportopen(int com) 试试
      

  2.   

    各位给的方法都是针对dll源程序的,但是dll开发包是别人给的,我这里没有源码。
    希望各位能解答以下问题,先谢过了:
    是不是DLL中的导出函数没有声明成FAR,而且用小模式编译?
    如果是这样,应该如何解决(在调用dll的程序里面)?(开发环境:VC6.0) 
      

  3.   

    你用Depends工具查看一下Commport.dll,找到名字类似Commportopen的函数名,并将你的GetProcAddress中的函数名参数改为与之相同试试看。
      

  4.   

    1、原Dll中定义为Pascal压栈方式,使用时也要定义为pascal压栈方式。
    2、察看Dll中的引出内容可以使用很多工具,depends是一个,还有tdump(borland的东西),dumpbin(MS的东西)
      

  5.   

    我debug了一下,发现函数指针和Depends列出的相符,说明GetProcAddress()获得的指针是
    正确的,问题就出在pascal压栈方式上。不好意思(小声地问),如何以pascal压栈方式调用
    Commport()?比如:_pascal (*Commport)(1)?编译时系统提示此关键字已经被废弃。
      

  6.   

    在函数声明前加上:extern "C" 即可。
      

  7.   

    typedef int (PASCAL *typeCommportopen)(int com );
    用typeCommportopen即可!