如何从VBA调用ScCreateConversationIndex?

问题描述

我正在使用Outlook365和Win10 x64版本。我尝试从VBA调用ScCreateConversationIndex来生成对话索引,到目前为止没有成功。我的代码如下:

Private Declare PtrSafe Function ScCreateConversationIndex Lib "mapi32.DLL" (ByVal cbParent As Long,ByVal lpbParent As String,lpcbIndex As Long,lppbIndex As String) As Long

Private Function genCnvIdx() As String

    Dim nPar As Long,par As String,lenIdx As Long,idx As String,rst As Long: rst = -1
    
    par = vbNullString
    nPar = Len(par)
    rst = ScCreateConversationIndex(nPar,par,lenIdx,idx)
    If rst = 0 Then
        genCnvIdx = idx
    End If

End Function

ScCreateConversationIndex总是生成以下错误

运行时错误'453':找不到DLL入口点 位于mapi32.DLL的ScCreateConversationIndex。

我使用记事本++搜索mapi32.DLL并找到ScCreateConversationIndex。在MS https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/sccreateconversationindex中,C ++函数定义为:

SCODE ScCreateConversationIndex(
  ULONG cbParent,LPBYTE lpbParent,ULONG FAR* lpcbIndex,LPBYTE FAR * lppbIndex
);

有什么提示吗?

解决方法

我认为您无法使用VBA中的ScCreateConversationIndex。

如果选择Redemption,它将公开RDOMail.CreateConversationIndex方法,该方法是ScCreateConversationIndex函数的包装器。该方法具有两个参数-父RDOMail对象和一个(可选)SubjectPrefix(例如“ RE”或“ FW”)。如果父RDOMail对象不为null,则从其检索PR_CONVERSATION_INDEX并使用PR_CONVERSATION_INDEX根据旧值创建一个新的ScCreateConversationIndex。然后,在RDOMail对象上设置新值。