用Delphi编写一个ActiveX DLL,接口中声明一个函数
function GetDepartInfo(pDptName: PChar; pParentDptName: PChar; pManager: PChar; pPhone: PChar;pFax: PChar; pAddress: PChar): SYSINT; stdcall;
函数实现如下:function TRFUser.GetDepartInfo(pDptName, pParentDptName, pManager, pPhone,
pFax, pAddress: PChar): SYSINT;
var
stDptName:string;
stParentDptID:string;
strManager: string;
begin
stDptName := string(pDptName);
with self.ADOQu_Temp do
begin
close;
sql.Clear;
sql.Add('select * from pb_depart where dptname='''+stDptName+'''');
try
open;
if isEmpty then
begin
result:=-1;
exit;
end;
stParentDptID := fieldbyname('dptParent').AsString;
strManager := FieldByName('Manager').AsString;
pManager := PChar(strManager);
pPhone := PChar(FieldByName('Phone').AsString);
PFax := PChar(FieldByName('Fax').AsString);
pAddress := PChar(FieldByName('Address').AsString);
//ShowMessage(String(pManager));
//strcopy(pManager,pchar(fieldbyname('Manager').asstring));
//strcopy(pPhone,pchar(fieldbyname('phone').AsString));
//strcopy(pFax,pchar(fieldbyname('fax').AsString));
//strcopy(pAddress,pchar(fieldbyname('Address').AsString));
except
On E: Exception do begin
//ShowMessage(E.Message);
result := -900;
exit;
end;
end;
end; with self.ADOQu_Temp do
begin
close;
sql.Clear;
sql.Add('select * from pb_depart where dptid='''+stParentDptID+'''');
try
open;
if isEmpty then
begin
result:=-2;
exit;
end;
pParentDptName := PChar(FieldByName('dptname').AsString);
//strcopy(pParentDptName,pchar(fieldbyname('dptname').asstring));
except
result:=-900;
exit;
end;
end; result:=0;end; 用VB6写的调用过程如下
Private Sub Command1_Click()
Dim strDepartName$, strParentDptName$, strManager$, strPhone$, _
strFax$, strAddress$
Dim oUser As RFUser
Set oUser = New AXUser.RFUser
'因为VB中的string类型只有赋值后才分配内存空间
strDepartName = "总部"
' strParentDptName = String(50, Chr(50))
' strManager = String(50, Chr(50))
' strPhone = String(50, Chr(50))
' strFax = String(50, Chr(50))
' strAddress = String(50, Chr(50))
If oUser.ConnectDB = 0 Then
oUser.GetDepartInfo strDepartName, strParentDptName, strManager, strPhone, _
strFax, strAddress
Dim strMsg$
strMsg = "Depart Name:" + strDepartName + vbCrLf + _
"Parent Depart Name:" + strParentDptName + vbCrLf + _
"Manager:" + strManager + vbCrLf + _
"Phone:" + strPhone + vbCrLf + _
"Fax:" + strFax + vbCrLf + "Address:" + strAddress
MsgBox strMsg
End If
Set oUser = Nothing
End Sub结果上述代码无法取到PChar类型的输出参数的值,怎么办,请高手指点。
function GetDepartInfo(pDptName: PChar; pParentDptName: PChar; pManager: PChar; pPhone: PChar;pFax: PChar; pAddress: PChar): SYSINT; stdcall;
函数实现如下:function TRFUser.GetDepartInfo(pDptName, pParentDptName, pManager, pPhone,
pFax, pAddress: PChar): SYSINT;
var
stDptName:string;
stParentDptID:string;
strManager: string;
begin
stDptName := string(pDptName);
with self.ADOQu_Temp do
begin
close;
sql.Clear;
sql.Add('select * from pb_depart where dptname='''+stDptName+'''');
try
open;
if isEmpty then
begin
result:=-1;
exit;
end;
stParentDptID := fieldbyname('dptParent').AsString;
strManager := FieldByName('Manager').AsString;
pManager := PChar(strManager);
pPhone := PChar(FieldByName('Phone').AsString);
PFax := PChar(FieldByName('Fax').AsString);
pAddress := PChar(FieldByName('Address').AsString);
//ShowMessage(String(pManager));
//strcopy(pManager,pchar(fieldbyname('Manager').asstring));
//strcopy(pPhone,pchar(fieldbyname('phone').AsString));
//strcopy(pFax,pchar(fieldbyname('fax').AsString));
//strcopy(pAddress,pchar(fieldbyname('Address').AsString));
except
On E: Exception do begin
//ShowMessage(E.Message);
result := -900;
exit;
end;
end;
end; with self.ADOQu_Temp do
begin
close;
sql.Clear;
sql.Add('select * from pb_depart where dptid='''+stParentDptID+'''');
try
open;
if isEmpty then
begin
result:=-2;
exit;
end;
pParentDptName := PChar(FieldByName('dptname').AsString);
//strcopy(pParentDptName,pchar(fieldbyname('dptname').asstring));
except
result:=-900;
exit;
end;
end; result:=0;end; 用VB6写的调用过程如下
Private Sub Command1_Click()
Dim strDepartName$, strParentDptName$, strManager$, strPhone$, _
strFax$, strAddress$
Dim oUser As RFUser
Set oUser = New AXUser.RFUser
'因为VB中的string类型只有赋值后才分配内存空间
strDepartName = "总部"
' strParentDptName = String(50, Chr(50))
' strManager = String(50, Chr(50))
' strPhone = String(50, Chr(50))
' strFax = String(50, Chr(50))
' strAddress = String(50, Chr(50))
If oUser.ConnectDB = 0 Then
oUser.GetDepartInfo strDepartName, strParentDptName, strManager, strPhone, _
strFax, strAddress
Dim strMsg$
strMsg = "Depart Name:" + strDepartName + vbCrLf + _
"Parent Depart Name:" + strParentDptName + vbCrLf + _
"Manager:" + strManager + vbCrLf + _
"Phone:" + strPhone + vbCrLf + _
"Fax:" + strFax + vbCrLf + "Address:" + strAddress
MsgBox strMsg
End If
Set oUser = Nothing
End Sub结果上述代码无法取到PChar类型的输出参数的值,怎么办,请高手指点。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货