问题描述
我正在使用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
对象上设置新值。