我用VC写的DLL文件,在VB 中调用,其中有大部分函数都能正常执行,但是有一个函数怎么调用都不成功,
VC函数原型:int GetTaskInfo(CArray<PW_TaskInfo,PW_TaskInfo>* pstTaskInfoArray,CString strWhere)
VB中调用:
Private Declare Function GetTaskInfo Lib "Sqlce3_Driver.dll" Alias "?GetTaskInfo@@YAHPAV?$CArray@UPW_TaskInfo@@U1@@@V?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsOS@_W@ATL@@@@@ATL@@@Z" (ByVal taskInfoArray() As structureReturn, ByVal strWhere As String) As IntPtr
提示的错误有2类 :
1。NotSupportedException
2。outofmemory
求救啊!在线等

解决方案 »

  1.   

    你是不是要引用dll的tlb文件?有可能是变量类型的问题dumpbin确认过到处函数名字吗?
      

  2.   

    CArray 是 MFC 的类,VB 中不对应。
      

  3.   

    VC函数原型:int GetTaskInfo(....)被VB调用一定会出错。VB能调用的VC函数原型一定是:
      int WINAPI GetTaskInfo(....)
      

  4.   

    函数名称应该没有问题 ,这个DLL 中的其他函数都能调用,我也用工具确认了入口函数的名称,
    目前就是卡在 :
    我的VC 入口函数第一个函数是个CArray类型,目的是存储我的返回数组,数组元素是自定义的结构体。
    每次调试提示:outofmemoryexecptioin,
    怎么在VB中对应CArray,并且这个Arrary中的类型是结构体.
    VC函数原型:int GetTaskInfo(CArray<PW_TaskInfo,PW_TaskInfo>* pstTaskInfoArray,CString strWhere),VB中应该怎么申明对应CArray<PW_TaskInfo,PW_TaskInfo>* pstTaskInfoArray,这个就是我需要的返回数组
      

  5.   

    同时补上我自定义的结构体: 
    VCDLL中的是:
    typedef   struct     
      {   
    WCHAR *TaskID;
    WCHAR *TaskName; 
    WCHAR *TaskFlag;
    WCHAR *TaskType;
    WCHAR *ScoutType;
    WCHAR *CreateDate;
    WCHAR *StartDate;
    WCHAR *EndDate;
    WCHAR *Principal;
    WCHAR *ScoutMan;
    WCHAR *ScoutEmph;
    WCHAR *PdaCode;
    WCHAR *UsePdaCode;
    WCHAR *TaskState;
    WCHAR *ScanType;
    WCHAR *DeptCode;
      }PW_TaskInfo;
    vb中的是:
        Private Structure structureReturn
            Dim TaskID As String
            Dim TaskName As String
            Dim TaskFlag As String
            Dim TaskType As String
            Dim ScoutType As String
            Dim CreateDate As String
            Dim StartDate As String
            Dim EndDate As String
            Dim Principal As String
            Dim ScoutMan As String
            Dim ScoutEmph As String
            Dim PdaCode As String
            Dim UsePdaCode As String
            Dim TaskState As String
            Dim ScanType As String
            Dim WCDeptCode As String
        End Structure
      

  6.   

    VB不会有办法能直接调用你这个VC接口函数的, 你需要重新定义这个VC接口, 或者用VC重新封装一个VB能够识别的接口函数间接的调用这个方法