用vs2005做一个dll,其中一个函数的参数类型是LPWSTR,就是delphi中的PWideChar。但在调用的时候总是出错,我已经测试了,如果直接传入字符串,没有问题。代码如下:函数:func(lpArg: LPWSTR): DWORD; cdecl; external 'XXX.DLL';调用:var
lpSS: PWideChar;
lsSS: string;
len: integer;
begin
lsSS := 'test';
len := Length(lsSS) + 1;
lpSS := AllocMem(len * SizeOf(WideChar));
try
StringToWideChar(lsSS, lpSS, len);
func(lpSS); //如果把lpSS改为'test'就没有问题
finally
FreeMem(lpSS);
end;
end;
请教高手。谢谢
lpSS: PWideChar;
lsSS: string;
len: integer;
begin
lsSS := 'test';
len := Length(lsSS) + 1;
lpSS := AllocMem(len * SizeOf(WideChar));
try
StringToWideChar(lsSS, lpSS, len);
func(lpSS); //如果把lpSS改为'test'就没有问题
finally
FreeMem(lpSS);
end;
end;
请教高手。谢谢
解决方案 »
- 求 FastReport version 4.5 的开发文档,
- Delphi7检测到错误类 EAccessViolation,错误信息:'Access violation at address 0047D5C7 in module
- 求助,如何在delphi中安装flatstyle控件
- 请教一条sql语句
- 为什么一个程序里同时打开10个以上数据库连接就出现内存错误!!!!
- 菜鸟的一个问题
- 急急急急!!!求一个好的FTP Client 控件! NMFTP 问题太多!高手指点有高分
- 如何将所有窗体最大化
- 调用储存过程时给过程中参数赋值的问题?
- 关于类的继承
- 有什么工具能把一个软件上面的背景图片或者按钮图片那些的图片都搞下来。
- 请教下如何画圆啊?在线等!!
var
pw:PWideChar;
ss:string;
pc:PChar;
begin
pw:='ABCD';
ss:=OleStrToString(pw);
pc:=PChar(ss);
ShowMessage(pc);
end;
lpSS: PWideChar;
lsSS: string;
len: integer; ///////////////
lpss定义成:
lpss: array[0..255] of WideChar;
可能问题出在函数调用方式,cdecl-〉stdcall试试看。