关于delphi调用vc生成dll的问题。我用vc生成的dll,delphi调用会报错,但是一直找不到问题所在,请大家进来帮我看看。
#define _TM_OS2 
#include "stdafx.h" 
#include "atmi.h" bool WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpvReserved ) 

      return TRUE; 
} LRESULT WINAPI TpStrCall1(char *ServiceName, char *Str) 

MessageBox( 0, ServiceName, "信息!", 0 ); 
MessageBox( 0, Str, "信息!", 0 ); 
return(0); 
} LRESULT WINAPI TpStrCall(char *ServiceName, char *SndStr, char *RevStr) 

char *sendbuf, *rcvbuf; 
long rcvlen; 
int  ret; if (strlen(SndStr) > 300) 

MessageBox( 0, "字符串超出指定长度!", "错误!", 0 ); 
return(tperrno); 
} if (tpinit((TPINIT *) NULL) == -1) 

MessageBox( 0, "连接初始化错误!", "错误!", 0 ); 
return(tperrno); 
} if((sendbuf = (char *) tpalloc("STRING", NULL, sizeof(SndStr))) == NULL) 

MessageBox( 0, "分配发送字符串出错!", "错误!", 0 ); 
tpterm(); 
return(tperrno); 
} if((rcvbuf = (char *) tpalloc("STRING", NULL, sizeof(SndStr)*2)) == NULL) 

MessageBox( 0, "分配接收字符串出错!", "错误!", 0 ); 
tpfree(sendbuf); 
tpterm(); 
return(tperrno); 
} strcpy(sendbuf, SndStr); ret = tpcall(ServiceName, (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0); 
if(ret == -1) 

MessageBox( 0, "tpcall失败!", "错误!", 0 ); 
tpfree(sendbuf); 
tpfree(rcvbuf); 
tpterm(); 
return(tperrno); 
} strcpy(RevStr, rcvbuf); 
tpfree(sendbuf); 
tpfree(rcvbuf); 
tpterm(); 
return(0); 
} LRESULT WINAPI check_newno(char *newno, int flag) 

  int m, len; 
  int i, j, k, l;   j = 0; 
  len = strlen(newno) - 1; 
  m = (len - 1) % 2; 
  
  for( i = len - 1; i >= 0; i-- ) 
  { 
      if(newno[i] > '9' || newno[i] < '0') 
return -1; 
          if( i%2 == m ) 
              l = (newno[i] - '0') * 2; 
          else 
              l = newno[i] - '0'; 
          j = j + l / 10 + l % 10; 
    }     j = j % 10;     if( j == 0 ) 
        j = 10;     k = 10 - j; 
    
    if(flag == TRUE) 
    { 
          if ( (char) newno[len] == (char) ('0' + k) ) 
              return 0; 
          else 
              return -1; 
    } 
    else 
    { 
          newno[len]  = '0' + k; 
          return 0; 
    } } 
delphi调用程序如下: 
  function TpStrCall(ServName: pChar; SndStr: pChar; RevStr: pChar): integer; 
    stdcall; external 'TuxAPI.dll'; 
  function check_newno(newno: PChar; flag: Integer): integer; 
    stdcall; external 'TuxAPI.dll'; 
  function MacHash(inputstr: PChar; outputstr: PChar; flat: PChar): integer;

解决方案 »

  1.   

    dll中导出函数声明和定义都加上stdcall修饰,同delphi中使用要一致
      

  2.   


    误导,请你看看WINAPI的宏定义究竟是啥??LZ,俺建议你直接调试这个DLL,看看究竟是哪里出错。
      

  3.   

    需要调用的函数都要导出extern "C" __declspec(dllexport)
    LRESULT WINAPI check_newno(char *newno, int flag) 

    ...
    }
      

  4.   

    直接调用报的:应用程序正常初始化(0xc000007b)失败
      

  5.   


    报的其它错:无法定位程序输入点 check_newno 于动态链接库 TuxAPI.dll上
      

  6.   

    报的其它错:无法定位程序输入点 check_newno 于动态链接库 TuxAPI.dll上
      

  7.   

    check_newno  这个函数你要导出.
      

  8.   

    需要导出的函数 声明为 
    void  _declspec(dllexport)  __stdcall function1()
    void  _declspec(dllexport)  __stdcall function2()
    void  _declspec(dllexport)  __stdcall function3()添加一个Def文件:
    LIBRARY DefClass
    EXPORTS     
      function1 @ 1
      function2 @ 2
      function3 @ 3
      

  9.   

    WINAPI   ------>pascal  试试
      

  10.   

    导入函数声明定义为_declspec(dllimport) void   passcal *  function1(); 
      

  11.   

    Delphi不熟悉,估计是出现你的调用方式上吧?