我可以围绕使用.NET函数的COM包装器DLL创建包装类吗?

时间:2013-02-01 02:10:50

标签: class com vb6 wrapper filenet-p8

很多人都讨论过COM互操作,我已经读过它们了。

案例1:VB 6或VBA需要使用.NET中的库(我有FileNet对象,IBM已经创建了一个可由VBA使用的COM包装器DLL

http://pic.dhe.ibm.com/infocenter/p8docs/v4r5m1/index.jsp?topic=%2Fcom.ibm.p8.doc%2Fdeveloper_help%2Fupg_custom_apps%2Fce_com_api.htm

案例2:您的.NET源代码需要使用COM / COM +对象类,这不是我的情况。

所以我的情况是案例1.我没有处理泛型(参见遗传学和COM互操作不混合,文章使用反射来解决问题,但是很慢。现在用C#4.0动态是要走的路(快100倍) http://www.west-wind.com/weblog/posts/2007/Jul/10/Generics-and-COM-Interop-dont-mix

为什么我需要编写另一个包装器?因为IBM文档说由于.NET库的限制而不支持ADOConnection。还有另一个功能是不可用的(它曾经在以前的版本中可用,所以我的ASP调用它)所以我必须生成我自己的。

函数FilterClassDescriptions(ByVal ObjType As Variant,Optional FilterType As Variant)As Variant

FileNet的包装器COM DLL使用编译成.NET DLL的FNCE类。由于.NET不支持ADOConnection,显然某些功能不再支持。但我的ASP依赖于这些功能。 FNCE => FileNet内容引擎。 FileNet ObjectStore class

所以我创建了一个围绕COM兼容层DLL的包装器VB6类,我尝试注册活动DLL和活动EXE,但在VBA for Excel中我没有成功创建对象(myFNCE2013)(意味着我没有内容对象),我确实得到了creteObject(FNCE),因为我可以在ObjectStore中看到东西。出了什么问题?

我的问题是封装后坏包装?或者因为我以前注册了相同的活动EXE / DLL导致问题?我用双击方法注册,第一次看到注册成功。我有Windows 2003服务器SP2,运行我的ASP的IIS。 enter image description here

enter image description here

以下是IBM对此的描述。

不支持内容引擎方法

Content Compatibility 4.x添加到COM兼容层支持的对象的新方法未在COM兼容层中公开。

COM兼容层接口公开了COM API支持但不支持Content Engine 4.x API的方法,但尝试调用这些方法将返回“不支持”错误。以下是这些方法的列表:

与文件商店相关

ObjectStore.CreateFileStore
ObjectStore.ReindexFileStore

OLEDB / ADO相关

**ObjectStore.GetADOConnection**

**ObjectStore.FilterClassDescriptions**
ObjectStore.FilterPropertyDescriptions

如果现有代码使用这些ObjectStore属性中的任何一个,则必须根据迭代ObjectStore.ClassDescriptions集合或使用ObjectStore.GetObject(“ClassDescription”,“”)编写自己的过滤逻辑。

这是我的调试信息。 enter image description here

感谢您阅读此处。我有一个丑陋的解决方案,但我仍然希望听到你的智能解决方案。我的丑陋的是:不要再写包装VB6类了,把代码放到ASP包含文件中所以ASP页面可以使用那些函数,但是后来我没有VB类,因为ASP包含文件不允许这样。那些包含文件应该能够直接调用COM对象。但是将类对象分解为非OOP功能代码?我们对类对象有如此舒适的思考,非OOP编程对我来说似乎很乡村。

Private oEntireNetwork As FNCE.EntireNetwork
Private oObjectStore As FNCE.ObjectStore
Private oUser As FNCE.user
Private sObjectStoreName As String
Private oDocument As FNCE.Document
Private sName As String
Private sSessionManager As String
Private sLogonID As String
Private ADOCnn As ADODB.Connection
Private oRtnRecordSet As New ADODB.Recordset



Public Function ActiveUser() As Variant
    On Error GoTo E
    Set ActiveUser = oEntireNetwork.CurrentUser
E:
    If Err.Number <> 0 Then Set ActiveUser = Nothing
End Function

Public Function Users() As Variant
    On Error GoTo E
    Set Users = oEntireNetwork.MyRealm.Users
E:
    If Err.Number <> 0 Then Set Users = Nothing
End Function

Public Function Groups() As Variant
    On Error GoTo E
    Set Groups = oEntireNetwork.MyRealm.Groups
E:
    If Err.Number <> 0 Then Set Groups = Nothing
End Function

Private Sub Class_Initialize()
    Dim iLoop
    On Error GoTo E
    bLogError = True
    sLogErrorPath = App.Path
    iDebugLevel = 1
    iLoop = 0

    If oEntireNetwork Is Nothing Then
        Set oEntireNetwork = New FNCE.EntireNetwork
    End If

    If bLogError = True Then
        WriteMsgToLogFile 1, "MyFNCE.ObjectStore:Class_Initialize()"
    End If
E:
    If Err.Number <> 0 Then
        If bLogError = True Then
            WriteMsgToLogFile 1, "MyFNCE.ObjectStore:Class_Initialize() -- Exception Error #" & Err.Number & ": " & Err.Description
        End If
    End If
End Sub

所以没有更多的类启动,我的ASP无法调用对象属性或函数。

1 个答案:

答案 0 :(得分:0)

我弄清楚了自己。包装纸周围的包装很好。我没有暴露变量而犯了错误,它们应公开供VBA使用,默认情况下它们是私有的。