首页  »   Delphi

delphi调用VC开发的DLL,调用OK,每次程序退出后报错,该怎么处理

网友分享于:2015-08-27  浏览:60次
delphi调用VC开发的DLL,调用OK,每次程序退出后报错
用VC开发的DLL,实现SIP软电话功能,需要用回调函数来实现。接口部分的代码均编译通过而且启动时候初始化成功,可是每次程序退出后均报错。不知道是调用的原因还是DLL的调用约定异常。一时间排查不出。下文分别是DLL接口的部分代码以及在DELPHI中定义的接口代码。请大家看看是什么原因?
DLL接口的部分代码
#ifndef __SIPPHONE_INTERFACE_H_INCLUDED_
#define __SIPPHONE_INTERFACE_H_INCLUDED_

#ifdef __cplusplus
extern "C" {
#endif

//////////////////////////////////////////////////////////////////////
// Macro/Struct definition
//////////////////////////////////////////////////////////////////////

typedef DWORD (WINAPI * CALLBACKFUN)(UINT uMsg,DWORD dwUserInstance,WPARAM wParam, LPARAM lParam);

//给应用层消息定义,对应回调函数的第一个参数UINT uMsg
enum SEND_APP_MSG
{
  MSG_SIP_CALLIN_FAIL,
  MSG_SIP_CALLIN_RINGING,
  MSG_SIP_CALLIN_CONNECT,
  MSG_SIP_RECV_INFO,
  MSG_SIP_CALLOUT_RING,
  MSG_SIP_CALLOUT_FAIL,
  MSG_SIP_CALLOUT_CONNECT,
   
  MSG_SIP_CALL_HONGOFF
};

#define RETURN_SUCCESS 0 //返回成功
//error code define
#define ERR_INPUT_PARAM_ERROR 1 //输入参数错误
#define ERR_SIP_PROC_NOTSTART 2 //SIP服务没有启动
#define ERR_SIP_PROC_ALREADYSTART 3 //已经启动
#define ERR_SIP_PROC_INITFAIL 4 //初始化失败
#define ERR_SIP_PROC_LISTENPORTFAIL 5 //SIP监听的端口错误
#define ERR_SIP_PROC_LISTENADDRFAIL 6 //SIP监听的地址错误
#define ERR_SIP_PROC_STARTTHREADFAIL 7 //启动工作线程失败
#define ERR_SIP_CALL_STATEERROR 8 //SIP呼叫时状态不一致
#define ERR_SIP_CALL_BUILDANSWERFAIL 9 //SIP呼叫时建立ANSWER消息失败
#define ERR_SIP_CALL_BUILDINVITEFAIL 10 //SIP呼叫时建立INVITE消息失败



//////////////////////////////////////////////////////////////////////
// APP Function statement
//////////////////////////////////////////////////////////////////////
//Function
/****************************************************************
* Function: SIP_Start
* Description: Start
* Parameter:  
* int listenPort:SIP监听端口号,必须大于1024  
* CALLBACKFUN lpfSIPProcCallBack:回调函数
* DWORD dwInstance:传入this指针
* Return:  
* 返回RETURN_SUCCESS成功,其他值失败 
*****************************************************************/
int WINAPI SIP_Start(int listenPort,
  CALLBACKFUN lpfSIPProcCallBack = NULL,
  DWORD dwInstance = NULL);

/****************************************************************
* Function: SIP_Stop
* Description: stop
* Parameter: 无
* Return: 无
*****************************************************************/
void WINAPI SIP_Stop();
后面部分省略。。。。

下文是delphi部分的接口代码.....
unit USIPPhoneInterface;

interface

uses windows;

// 定义系统参数的结构
Type

  TMSG_SIPAPP_SEND =
  (
  MSG_SIP_CALLIN_FAIL,
  MSG_SIP_CALLIN_RINGING,
  MSG_SIP_CALLIN_CONNECT,
  MSG_SIP_RECV_INFO,
  MSG_SIP_CALLOUT_RING,
  MSG_SIP_CALLOUT_FAIL,
  MSG_SIP_CALLOUT_CONNECT,
  MSG_SIP_CALL_HONGOFF
  );

  
  TpEventHandler= Function (dwEvent:TMSG_SIPAPP_SEND;pUserInstance : pointer;strResult: pchar;nLenResult:integer):integer;

  
const
  RETURN_SUCCESS = $00; //返回成功
  ERR_INPUT_PARAM_ERROR = $01; //输入参数错误
  ERR_SIP_PROC_NOTSTART = $02; //SIP服务没有启动
  ERR_SIP_PROC_ALREADYSTART = $03; //已经启动
  ERR_SIP_PROC_INITFAIL = $04; //初始化失败
  ERR_SIP_PROC_LISTENPORTFAIL = $05; //SIP监听的端口错误
  ERR_SIP_PROC_LISTENADDRFAIL = $06; //SIP监听的地址错误
  ERR_SIP_PROC_STARTTHREADFAIL = $07; //启动工作线程失败
  ERR_SIP_CALL_STATEERROR = $08; //SIP呼叫时状态不一致
上一页1/2下一页

相关解决方案

最新解决方案