请问C++做的的DLL函数,Delphi怎么调?int WINAPI GetDeviceVersion(WCHAR* buf); ( 积分: 50 )

  • 主题发起人 主题发起人 kingbenz
  • 开始时间 开始时间
K

kingbenz

Unregistered / Unconfirmed
GUEST, unregistred user!
/*<br> * 取Device系统版本号。<br> * 返回版本号字符串长度;0 错误,取不到版本号。<br> * 参数:<br> * buf 输出字符串,格式:xxx.xxx.xxxx(MajorVersion.MinorVersion.BuildNumber)。<br> */<br>int WINAPI GetDeviceVersion(WCHAR* buf);<br><br>主要是WCHAR* buf不清楚用什么类型代进去.
 
/*<br> * 取Device系统版本号。<br> * 返回版本号字符串长度;0 错误,取不到版本号。<br> * 参数:<br> * buf 输出字符串,格式:xxx.xxx.xxxx(MajorVersion.MinorVersion.BuildNumber)。<br> */<br>int WINAPI GetDeviceVersion(WCHAR* buf);<br><br>主要是WCHAR* buf不清楚用什么类型代进去.
 
function GetDeviceVersion(var Buf: WideString): Integer;
 
function GetDeviceVersion(var Buf: WideString): Integer; stdcall; external 'xxx.dll';<br>其实<br>var Buf: WideString<br>buf:PWideChar<br>buf:pchar<br>都可以<br>只要先分配空间即可
 
最保险的做法:<br>function GetDeviceVersion(Buf: PWideChar): Integer; stdcall; external 'xxx.dll';<br>调用的时候要注意先分配内存。因为函数的返回值本身就是缓冲区大小,所以可以根据返回值来分配内存,按照一般的惯例,只要调用函数时将Buf参数的值设为nil就可以直接返回缓冲区所需大小了。<br>比如可以这么写:<br>var<br> &nbsp;Buf:PWideChar;<br>...<br> &nbsp;GetMem(Buf,GetDeviceVersion(nil)+1); &nbsp;// 加多一个存储单元是为了预留给空结束符 号<br> &nbsp;GetDeviceVersion(Buf);<br>...
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
794
import
I
I
回复
0
查看
752
import
I
后退
顶部