delphi7调用com的dll里面的方法老是提示类型不匹配 com 类型的dll 已经在系统上注册成功   test.dll  里面有一个方法 Public  Function Read(dd As Double,ii1 As Integer,ss1 As String,ss2 As String, ii2 As Integer) As Long我在delphi7里面申明了一个方法function csdll22(): Longint ; stdcall;
var
lot:Longint;
dou:double;
i12:int64;
s1:widestring;
s2:widestring;
i13:int64;vor:OleVariant;begin
      try
       vor:=CreateOleObject('ICCardClass.CardProcess');
       lot:=vor.Read(dou,i12,s1,s2,i13);
        result:= lot;
        except
       on E:Exception do
       begin
       showmessage(e.Message) ;
       result:=99;
       end;
       end;
end; 调用  vor.read() 方法  的时候捕获到异常提示    类型不匹配。 用c++调用是成功的。c++ 申明了 BSTR 类型去对应 函数里面的 string 类型
 但是在delphi7 中没有找到这个类型,去网上找了下,说是对应到 delphi7的 widestring 但是我调用还是报错 还是提示  类型不匹配。 前辈们  请指导。 
delphicomBSTRdll

解决方案 »

  1.   

    用pwidechar,使用前自己给它getmem分配内存
    为啥vb中声明的是integer,你delphi中却又用int64
      

  2.   

     改成了  Integer  也是一样的提示
      

  3.   

      如果把  s1 定义为 pwidechar  
     
      这句又报错 lot:=vor.Read(dou,i12,s1,s2,i13);  
       [Error] test.dpr(51): Type not allowed in OLE Automation call   是不是还要做什么操作啊? 内存我也申请了
        getmem(s1,255);
        getmem(s2,255);
      

  4.   

    用pwidechar试过了没
    coinitialize
    ....
    var
     s1,s2:pwidechar;
    begin
      getmem(s1,256);
      getmem(s2,256);
      ....
      lot:=vor.Read(dou,i12,s1,s2,i13);
      ....
      freemem(s1,256);
      freemem(s2,256);
      ....
    end; couninitialize
    ....
      

  5.   

     就是因为试了啊, 报错啊。  这句又报错 lot:=vor.Read(dou,i12,s1,s2,i13);  
       [Error] test.dpr(51): Type not allowed in OLE Automation call
      

  6.   

    类型应该没错了 
    另外你初始化com了没
    initialization oleinitialize(nil);
    finalization oleuninitialize;
      

  7.   


     我是新手啊,能不能说明白一点啊还是不太懂啊
     oleinitialize(nil);
     lot:=vor.Read(dou,i12,s1,s2,i13);
     oleuninitialize;我加进去了还是编译通不过啊,直接提示这个 这句又报错 lot:=vor.Read(dou,i12,s1,s2,i13);  
       [Error] test.dpr(51): Type not allowed in OLE Automation call
      

  8.   

    你可以发这个com给俺试
    传到你的baidu云盘上,现在送2tb容量哦,一般人我不告诉的