Activex Dll(100分)

  • 主题发起人 主题发起人 gxsh
  • 开始时间 开始时间
G

gxsh

Unregistered / Unconfirmed
GUEST, unregistred user!
用 delphi 做的 Activex dll 传递 WideString 参数在 VB 里出现非法操作,用 pchar 作参数 VB 不接受,如何解决?
 
我想起我用VBScript写ASP时需要的一个问题,当一个ActiveX组件的方法(函数)有1个参
数时,VBScript这样调用:FunctionName(Param)就可以,但是当有两个以上的参数
时,FunctionName(Param1,Param2,Param3...)就要报错,
必须得用: FunctionName Param1, Param2, Param3...
不知是不是这个问题。(抱歉,我不懂VB)
 
我的 DLL 里的函数是这样写的(简化后):

function GetText: WideString
stdcall;

function TcTest.GetText: WideString;
begin
Result:= WideString('abcdefghijk');
end;
 
FunctionName(Param1,Param2,Param3...)是要返回参数的
FunctionName Param1, Param2, Param3...是不需要返回参数的

 
不能用Result返回字符串!
你在声明方法时,可以将要返回的串作为一个输出参数,返回设为HRESULT!
 
delphi 不让用 string 作为输出参数,提示输出参数要用指针类型的,指针类型 vb 又不认。
怎么办?各位大侠救命啊!
 
用BSTR作为返回类型呢?
 
参数类型可设为BSTR * 声明后,你看DELPHI生成的代码就明了!
VB里调用时用BSTR 类型的作为参数就可以了!
 
谢谢qiva,还差一点点(没办法我的水平太低)。
我把代码改成:
type
TcTest = class(TTypedComObject, IcTest)
protected
function GetText(out str: WideString): HResult
stdcall;
end;

implementation

uses ComServ;

function TcTest.GetText(out str: WideString): HResult;
begin
str:= WideString('abcdefghijkl');
Result := S_OK;
end;

delphi 里调用没问题,vb 里调用时不再出错,但返回的字符串总为空,该怎么办?
 
我这里没有VB试,你把参数设为 Out 和 RetVal 试一下!
str:= WideString('abcdefghijkl')
应该可以不用转换的,直接写就可以了吧
str := 'abc'
Delphi自己知道转换
 
OK,太感谢了,总算把哪个 TYPE LIB 弄明白了,TNND!不知道试了多少次,设置太多了,灵活的
后果是复杂。用VB 写哪个DLL 2分钟就搞定了,可 VB ……唉——
 
后退
顶部