VB .NET函数调用C ++ COM方法接收变量作为输出

时间:2015-11-17 20:12:20

标签: c++ .net vb.net com

我绞尽脑汁几乎杀了我的键盘试图让这个工作成功。任何帮助将不胜感激。

我正在创建一个VB .NET应用程序,它是另一个系统的帮助应用程序。我可以访问我正在访问的应用程序的API。简而言之,这是我需要调用的C ++ COM函数:

RecordSearch(RemoteServer,ScreenName,FieldData,ObjId,Flags,MaxHitCount,ResultSet,ScreenDef,OASError)
  • 远程服务器= [IN] Dispatch - 对象连接,如果已连接则无法使用
  • ScreenName = [IN] String - 要使用的屏幕的名称
  • FieldData = [IN] Dispatch - 要查找的数据的对象,无法接受
  • ObjId = [IN] Dispath - 要查找的文件的对象
  • Flags = [IN] Long - 始终为0,将来使用
  • MaxHitCount = [IN] Long - 要检索的最大记录数(0全部返回)
  • ResultSet = [OUT] Variant - 记录找到的记录数组
  • ScreenDef = [OUT] Variant - 描述屏幕的屏幕定义
  • OASError = [OUT] Long - 如果成功则返回0,否则返回服务器

我有权声明ResultSet& ScreenDef的方式不同。我的问题是当我尝试以这种方式传递函数时,我不断收到类型不匹配错误:

Dim Optix8 As OptixRemoteServer = New OptixRemoteServer()
Dim Optix8WS As Object = CreateObject("Optix8.Application")

Optix8WS.ServerSelect("Mac")

If (Optix8WS.ServerLogon("########")) Then
    Dim screen_name = "Claims"
    Dim myFieldData As Object = Nothing
    Dim myObjectId = CreateObject("Optix8.Objid")
    myObjectId.FromString("oas:/12000/file/22")
    Dim Flags As Long = 0
    Dim MaxHitCount As Long = 0
    Dim myResultSet As Object = Nothing
    Dim myScreenDef As Object = Nothing
    Dim OASError = Nothing
    Try
        Dim result = Optix8WS.RecordSearch(Nothing, screen_name, myFieldData, myObjectId, Flags, MaxHitCount, myResultSet, myScreenDef, OASError)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End If

问题在于myResultSet& myScreenDef我相信。我不完全理解如何将这两个[out]传递给创建的空对象。我在C#中使用out和ref完成了这个,但是这些在VB.NET中是不可行的。

我错过了什么吗?我怎么做到这一点?我对VB.NET不是很了解。我是C#程序员。

0 个答案:

没有答案