在一个DLL(文件名为smppapidll.dll)中声明了以下函数,请问我应该如何在VB这些函数,以及如何实现里面的回调函数,只要up就有分,解决问题的另给
ifndef SMPP_API_HEADER
#define SMPP_API_HEADER#if defined(__cplusplus)
extern "C"
{
#endif#define DllExport __declspec(dllexport)typedef void (FAR PASCAL  *LPSMPPSENDREPORTCALLBACK)(DWORD nMsgId, int nState, LPCSTR lpszSubmitTime, LPCSTR lpszDoneTime, LPCSTR lpszDestterminalId, int nSequenceId);
typedef void (FAR PASCAL  *LPSMPPSUBMITRESPCALLBACK)(DWORD dwSequence, DWORD nMsgId, DWORD Status);
typedef void (FAR PASCAL  *LPSMPPRECEIVECALLBACK)(DWORD nMsgID, LPCSTR lpszDestnationId, LPCSTR lpszServiceId, int nMsgFmt,LPCSTR lpszSrcTermId, LPCSTR lpszMsg, int nMsgLen, LPBYTE LinkID);
typedef void (FAR PASCAL  *LPSMPPSTATUSCALLBACK)(DWORD Status);DllExport int SMPPInitialize(LPCTSTR lpszINIFileName);
DllExport int SMPPConnect();
DllExport int SMPPDisconnect();
DllExport int SMPPTerminate();
DllExport int SMPPSendMessage(
DWORD *lpdwSequence,
LPTSTR lpszServiceType,
int TP_pid,
int TP_udhi,
int nMsgFmt, 
LPCSTR lpszValidTime,
LPCSTR lpszAtTime,
LPCSTR lpszSrcTermId,
int nDestTermNum,
LPCSTR *lpDestTermIds,
LPCSTR lpszMsg, 
int nMsgLen,
int nReportStatus, 
BOOL bWait,
LPBYTE LinkID
);
DllExport int SMPPSetSendReportCallback(
LPSMPPSENDREPORTCALLBACK lpfnSendReportCallback);
DllExport int SMPPSetSubmitRespCallback(
LPSMPPSUBMITRESPCALLBACK lpfnSubmitRespCallback);
DllExport int SMPPSetReceiveCallback(
LPSMPPRECEIVECALLBACK lpfnReceiveCallback);
DllExport int SMPPSetStatusCallback(
LPSMPPSTATUSCALLBACK lpfnStatusCallback);
DllExport void SMPPActiveTest();#if defined(__cplusplus)
}
#endif #endif // #ifndef SMPP_API_HEADER

解决方案 »

  1.   

    Private Declare Function SMPPInitialize Lib "smppapidll.dll" (ByVal lpszINIFileName As String) As Long
    Private Declare Function SMPPConnect Lib "smppapidll.dll" () As Long
    Private Declare Function SMPPDisconnect Lib "smppapidll.dll" () As Long
    Private Declare Function SMPPTerminate Lib "smppapidll.dll" () As Long
    Private Declare Function SMPPSendMessage Lib "smppapidll.dll" ( _
        ByVal lpdwSequence As Long, _
        ByVal lpszServerType As String, _
        ByVal TP_pid As Long, _
        ByVal TP_udhi As Long, _
        ByVal lpszValidTime As String, _
        ByVal lpszAtTime As String, _
        ByVal lpszSrcTermId As String, _
        ByVal nDestTermNum As Long, _
        ByVal lpDestTermIds As String, _
        ByVal lpszMsg As String, _
        ByVal bWait As Long, _
        LinkID As Any) As Long
        
    Private Declare Function SMPPSetSendReportCallback Lib "smppapidll.dll" (ByVal lpfnSendReportCallback As Long) As Long
    Private Declare Function SMPPSetSubmitRespCallback Lib "smppapidll.dll" (ByVal lpfnSubmitRespCallback As Long) As Long
    Private Declare Function SMPPSetReceiveCallback Lib "smppapidll.dll" (ByVal lpfnReceiveCallback As Long) As Long
    Private Declare Function SMPPSetStatusCallback Lib "smppapidll.dll" (ByVal lpfnStatusCallback As Long) As Long' 至于函数声明倒是好说,只是使用的时候注意一下,主要是 SMPPSendMessage 这个函数,如
    Dim lpDestTermIds As String * 255
    Dim LinkID() As Byte
    LinkID = StrConv("Tekken", vbFromUnicode)
    SMPPSendMessage 0, "", 0, 0, "", "", "", lpDestTermIds, "", "", 0, LinkID' 回调函数就给它传一个函数地址,给出一个基本结构,把参数匹配一下就差不多了,祝你好运
    SMPPSetSendReportCallback AddressOf SendReportCallback
    SMPPSetSubmitRespCallback AddressOf SubmitRespCallback
    SMPPSetReceiveCallback AddressOf ReceiveCallback
    SMPPSetStatusCallback AddressOf StatusCallbackPublic Function SendReportCallback(ByVal dwParam As Long) As Boolean
        SendReportCallback = True
    End FunctionPublic Function SubmitRespCallback(ByVal dwParam As Long) As Boolean
        SubmitRespCallback = True
    End FunctionPublic Function ReceiveCallback(ByVal dwParam As Long) As Boolean
        ReceiveCallback = True
    End FunctionPublic Function StatusCallback(ByVal dwParam As Long) As Boolean
        StatusCallback = True
    End Function
      

  2.   

    你先要在VB中声明要引用的这个DLL
    然后再在程序中引用DLL的函数。up to u!
      

  3.   

    Private Declare Function SMPPInitialize Lib "smppapidll.dll" (ByVal lpszINIFileName As String) As Long
    Private Declare Function SMPPConnect Lib "smppapidll.dll" () As Long
    Private Declare Function SMPPDisconnect Lib "smppapidll.dll" () As Long
    Private Declare Function SMPPTerminate Lib "smppapidll.dll" () As Long
    Private Declare Function SMPPSendMessage Lib "smppapidll.dll" ( _
        ByVal lpdwSequence As Long, _
        ByVal lpszServerType As String, _
        ByVal TP_pid As Long, _
        ByVal TP_udhi As Long, _
        ByVal lpszValidTime As String, _
        ByVal lpszAtTime As String, _
        ByVal lpszSrcTermId As String, _
        ByVal nDestTermNum As Long, _
        ByVal lpDestTermIds As String, _
        ByVal lpszMsg As String, _
        ByVal bWait As Long, _
        LinkID As Any) As Long
        
    Private Declare Function SMPPSetSendReportCallback Lib "smppapidll.dll" (ByVal lpfnSendReportCallback As Long) As Long
    Private Declare Function SMPPSetSubmitRespCallback Lib "smppapidll.dll" (ByVal lpfnSubmitRespCallback As Long) As Long
    Private Declare Function SMPPSetReceiveCallback Lib "smppapidll.dll" (ByVal lpfnReceiveCallback As Long) As Long
    Private Declare Function SMPPSetStatusCallback Lib "smppapidll.dll" (ByVal lpfnStatusCallback As Long) As Long' 至于函数声明倒是好说,只是使用的时候注意一下,主要是 SMPPSendMessage 这个函数,如
    Dim lpDestTermIds As String * 255
    Dim LinkID() As Byte
    LinkID = StrConv("Tekken", vbFromUnicode)
    SMPPSendMessage 0, "", 0, 0, "", "", "", lpDestTermIds, "", "", 0, LinkID' 回调函数就给它传一个函数地址,给出一个基本结构,把参数匹配一下就差不多了,祝你好运
    SMPPSetSendReportCallback AddressOf SendReportCallback
    SMPPSetSubmitRespCallback AddressOf SubmitRespCallback
    SMPPSetReceiveCallback AddressOf ReceiveCallback
    SMPPSetStatusCallback AddressOf StatusCallbackPublic Function SendReportCallback(ByVal dwParam As Long) As Boolean
        SendReportCallback = True
    End FunctionPublic Function SubmitRespCallback(ByVal dwParam As Long) As Boolean
        SubmitRespCallback = True
    End FunctionPublic Function ReceiveCallback(ByVal dwParam As Long) As Boolean
        ReceiveCallback = True
    End FunctionPublic Function StatusCallback(ByVal dwParam As Long) As Boolean
        StatusCallback = True
    End Function基本同意!
    注意lib中加入路径:
    Private Declare Function SMPPInitialize Lib "路径\smppapidll.dll" (ByVal lpszINIFileName As String) As Long
      

  4.   

    偶對api沒有研究哦,所以偶8知道呢http://www.1000vb.net/html/article/list.asp?id=73
      

  5.   

    up to u.
     here is VB
      

  6.   

    用上面的方法测试不带参数的API允许调用,但是测试带参数的API则提示“DLL错误调用”
    如:SMPPInitialize "smpp.ini"无法调用,而调用SMPPConnect或SMPPDisconnect则可以。
    这是为什么?
      

  7.   

    用上面的方法测试不带参数的API允许调用,但是测试带参数的API则提示“DLL错误调用”
    如:SMPPInitialize "smpp.ini"无法调用,而调用SMPPConnect或SMPPDisconnect则可以。
    这是为什么?
      

  8.   

    这种原因一般是dll调用约定错误,比如这个dll如果是cdecl或fastcall或pascal的话,那调用时就会产生这样的错误,因为vb本身只支持stdcall约定的dll调用,不过前段时间绿豆兄放上来一段代码,可以实现调用任意约定的dll,详情可以参考
    http://expert.csdn.net/Expert/TopicView1.asp?id=2952906