当VC等调用C#写的COM时,用regasm  /tlb生成TLB文件,也可用tlbexp.exe,在VC等中加载TLB文件,当用C#调用VC等写的COM时,用tlbimp.exe,你可以写一个程序调试一下
      添加System.Runtime.InteropServices命名空间
    如是COM就直接用静态函数调用:                 
  public  static  int  GetNum( 
                          int  lFileSeqNo, 
                          string  sExtType, 
                          string  sExtNumber, 
                          string  sFormID, 
                          string  sOperationDate, 
                          string  sSystemRegistDate, 
                          out  int  lCount, 
                          out  int  lErrorType, 
                          out  int  lErrorCode) 
                  { 
                          int  iRet; 
   
WOBCom.ObjClass  obj  =  new  WOBCom.ObjClass();       
                          iRet  =  obj.GetNum( 
                                  lFileSeqNo, 
                                  sExtType, 
                                  sExtNumber, 
                                  sFormID, 
                                  sOperationDate, 
                                  sSystemRegistDate, 
                                  out  lCount, 
                                  out  lErrorType, 
                                  out  lErrorCode); 
   
                          return  iRet; 
                  } 
  如不使COM是普通的DLL 
  不能直接用 
  只能在C++中加一个对外的接口: 
  extern  "C"  __declspec(dllexport)  WOExtConRegObj*  OutGetObjConstructor(); 
  extern  "C"  __declspec(dllexport)  void  OutGetObjDestructor(WOExtConRegObj*  outGetObj); 
   
  extern  "C"  __declspec(dllexport)  long  SelectDummyRecord(long  *lErrorType, 
        long  *lErrorCode, 
        WOExtConRegObj*  outGetObj); 
  // 
  extern  "C"  __declspec(dllexport)  WOExtConRegObj*  OutGetObjConstructor() 
  { 
          WOExtConRegObj*  outGetObj  =  new  WOExtConRegObj(); 
   
          return  outGetObj; 
  } 
   
  extern  "C"  __declspec(dllexport)  void  OutGetObjDestructor(WOExtConRegObj*  outGetObj) 
  { 
          delete  outGetObj; 
  } 
   
  extern  "C"  __declspec(dllexport)  long  SelectDummyRecord(long  *lErrorType, 
        long  *lErrorCode, 
        WOExtConRegObj*  outGetObj) 
  { 
  return  outGetObj->SelectDummyRecord(lErrorType, 
  lErrorCode); 
   
  } 
  C#就可直接调用了 
                  [DllImport("XXX.dll", 
                            EntryPoint="SelectDummyRecord", 
                            ExactSpelling=false, 
                            CallingConvention=CallingConvention.Cdecl)] 
                  private  static  extern  int  SelectDummyRecord(     
                          out  int  lErrorType, 
                          out  int  lErrorCode, 
                          int  outGetObj); 
   
                  ///  <summary> 
                  ///  </summary> 
                  ///  <remarks> 
                  ///  </remarks>                 
                  ///  <param  name="lErrorType"></param> 
                  ///  <param  name="lErrorCode"></param> 
                  ///  <returns></returns> 
                  public  int  SelectDummyRecord( 
                          out  int  lErrorType, 
                          out  int  lErrorCode) 
                  { 
                          int  intRtn; 
   
                          intRtn  =  SelectDummyRecord( 
                                  out  lErrorType, 
                                  out  lErrorCode, 
                                  m_OutGetObj); 
   
                          return  intRtn; 
                  } 
posted on 2011-02-12 14:16  Berthing  阅读(197)  评论(0)    收藏  举报