请问如何在给函数传递指针,就像WIN32API中有的函数传指针(200分)

  • 主题发起人 主题发起人 freeswordman
  • 开始时间 开始时间
F

freeswordman

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何在给函数传递指针,就像WIN32API中有的函数传指针
Function PubFun1(const FirstP:^String
const Secp:^String):String;
为什么出错
[Error] uEncrypt.pas(7): Identifier expected but '^' found
请问改如何处理
我的函数的参数是指针!
 
改用PChar不就得了?
Function PubFun1(const First:[red]PChar[/red]
const Secp:PChar):[red]String[/red];
 
Delphi对类型的限制很严格。

type PA=^string;
type PB=^string;
var
a,b:PA;
c:PB;
e,f:^string;
g:^string;

a:=b;//OK
a:=c;//错误!类型不兼容Incompatible types
e:=f;//OK
e:=g;//错误!类型不兼容Incompatible types


因此,如果你这样写:
Function PubFun1(const FirstP:^String
const Secp:^String):String;
则将无法调用,是无意义的。
应当:
type PMyString=^string;
var
MyString1,MyString2:PMyString;

Function PubFun1(const FirstP:PMyString
const Secp:PMyString):String;
调用:
PubFun1(Mystring1,Mystring2);
 
可以这样
FirstP=^String;
SecP=^String;

然后:Function PubFun1(const xFirstP:FirstP
const xSecp:SecP):String;
 
谢谢各位,我先试一下了。
 
我些的这个函数放在一个dll中,供我的同事调用,我用pchar做参数,调用老是报错。报错说读了无效地址。
 
这个dll在vb里面调用,然后报错错误代码如下:我没语言了,帮帮忙
VB6 在 018f:0c3d7726 的模块 PUBFUN.DLL 中导致例外 eedfadeH。
Registers:
EAX=0c410b98 CS=018f EIP=0c3d7726 EFLGS=00000202
EBX=0c3d68ac SS=0197 ESP=007ff194 EBP=007ff21c
ECX=00000000 DS=0197 ESI=007ff1c4 FS=6c17
EDX=0c3d7726 ES=0197 EDI=00000000 GS=0000
Bytes at CS:EIP:
5f 5e 5b c3 8b c0 53 56 8b d8 8b c3 e8 99 af ff
Stack dump:
0c3d7726 0c410b98 0c3d68ac 007ff1c4 00000000 007ff21c 007ff1b0 007ff234 00000000 0c410b90 0c3d7a15 00000002 0c410b90 007ff20b 00000000 007ff2b4
 
那是因为,你同事在调用该函数时,pchar参数没有分配内存。要使用指针,一定要分配内存
 
原来是作为DLL用!
函数声明时要加上stdcall指示
Function PubFun1(const FirstP:PChar
const Secp:PChar):PChar;stdcall;

Function PubFun1(const FirstP:PChar
const Secp:PChar):PChar;
begin
GetMem(Result,255);
StrPCopy(Result,string(FirstP)+string(Secp));
end;

VB 中声明:
Public Declare Sub PubFun1 Lib "ADLL.DLL" (ByVal FirstP As String, ByVal Secp As String) As String

好运!
 
谢谢了,虽然问题没有解决
 
后退
顶部