继续昨天的话题,VB调用delphi控件的问题
时间:2011-07-24
来源:互联网
Delphi(Pascal) code
VB code
delphi的代码是控件的源码,在delphi中引用这个控件和在VB中引用这个控件,得出的结果不一样。新手,实在找不出问题所在,还请大神们帮忙看看
library SSWSDataInterface; uses SysUtils, Classes, PublicConstStr in 'PublicConstStr.pas', CommonFunc in 'CommonFunc.pas', DataInterfaceUnit in 'DataInterfaceUnit.pas', DataStreamRar in 'DataStreamRar.pas'; {$E dll} {$R *.res} function TSDataCompress(const AInputData:PChar; var AOutputData:PWideChar; var AMessage:PWideChar):Integer; stdcall; var strOutputData:WideString; StrInputData:PWideChar; begin try //40 Result := -1; try //40 StrInputData:=PWideChar(WideString(AInputData)); Result := TransfersDataCompress(StrInputData, strOutputData, AMessage); except on E:Exception do begin AMessage := PWideChar(WideString(E.Message)); Exit; end; end; //40 if Result = 0 then begin strOutputData := Copy(strOutputData, 1, cst_WideCharSize - 1); StringToWideChar(strOutputData, AOutputData, cst_WideCharSize * 2 + 1); end; finally end; //40 end; function TSDataDeCompress(const AInputData:PWideChar; var AOutputData:PWideChar; var AMessage:PWideChar):Integer; stdcall; var strOutputData:WideString; begin try //40 Result := -1; try //40 Result := TransfersDataDeCompress(AInputData, strOutputData, AMessage); except on E:Exception do begin AMessage := PWideChar(WideString(E.Message)); Exit; end; end; //40 if Result = 0 then begin strOutputData := Copy(strOutputData, 1, cst_WideCharSize - 1); StringToWideChar(strOutputData, AOutputData, cst_WideCharSize * 2 + 1); end; finally end; //40 end; exports TSDataCompress name 'TSDataCompress', TSDataDeCompress name 'TSDataDeCompress'; begin end.
VB code
Option Explicit Private Declare Function TSDataCompress Lib "c:\SSWSDataInterface.dll" (AInputData As String, AOutputData As String, AMessage As String) As Integer Private Declare Function TSDataDeCompress Lib "c:\SSWSDataInterface.dll" (AInputData As String, AOutputData As String, AMessage As String) As Integer Private Sub Command1_Click() Dim strInput As String Dim strOutput As String Dim strMessage As String Dim intP As Integer strInput = Text1.Text ' strInput = StrConv(strInput, vbWide) strOutput = String(50000, vbNullChar) strMessage = String(50000, vbNullChar) intP = TSDataCompress(strInput, strOutput, strMessage) Debug.Print strOutput Debug.Print strMessage MsgBox StrConv(strMessage, vbFromUnicode) Text2.Text = StrConv(strOutput, vbFromUnicode) End Sub
delphi的代码是控件的源码,在delphi中引用这个控件和在VB中引用这个控件,得出的结果不一样。新手,实在找不出问题所在,还请大神们帮忙看看
作者: zydyw 发布时间: 2011-07-24
具体哪里不一样呢?我只看到代码是不一样。。。
作者: sysdzw 发布时间: 2011-07-24
如传入参数文本 “select top 200 * from 农户信息”
在Vb中得到的结果是 :BQAAAHja2zBbipcLAAZTAX0=
而在delphi中得出的结果是:IAAAAHjaK07NSU0uUSjJL1AwMjBQ0FJwK8rPVTi6cvfyC0fPL+LlAgC+pAyx
在Vb中得到的结果是 :BQAAAHja2zBbipcLAAZTAX0=
而在delphi中得出的结果是:IAAAAHjaK07NSU0uUSjJL1AwMjBQ0FJwK8rPVTi6cvfyC0fPL+LlAgC+pAyx
作者: zydyw 发布时间: 2011-07-24
Delphi(Pascal) code
这是delphi中的调用过程
procedure TForm1.Button2Click(Sender:TObject); var AInputData:PWideChar; AOutputData:PWideChar; AMessage:PWideChar; a:WideString; intResult:SmallInt; begin try a := Trim(Memo1.Text); AInputData := PWideChar(a); GetMem(AOutPutData, cst_Size); StringToWideChar('', AOutputData, cst_Size); intResult := TSDataCompress(AInputData, AOutputData, AMessage); //ShowMessage(IntToStr(intResult)); Memo2.Clear; //Memo2.Lines.Add('错误信息:'); //Memo2.Lines.Add(AMessage); //Memo2.Lines.Add(IntToStr(Length(AOutputData))); //Memo2.Lines.Add('返回结果::'); Memo2.Lines.Add(AOutputData); Memo2.SelStart := 0; finally FreeMem(AOutPutData); end; end;
这是delphi中的调用过程
作者: zydyw 发布时间: 2011-07-24
呵呵,楼主还在纠结啊。。。
作者: Veron_04 发布时间: 2011-07-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28