F
funxu
Unregistered / Unconfirmed
GUEST, unregistred user!
最近有个字符转换的任务,但是要求能被vb调用,本人对vb不是很熟,找了个同事人要了个utf8tounicode的dll可是vb调不了<br>另外下面代码中//fillchar(p,255,0);之后会将输入的字符串也清空,不知到为什么,而且不仅vb调不了,同时delphi调用也会出错,感觉上是使用了string的缘故,请问如何修改<br>问题<br>1.为什么fillchar(p,255,0);之后会将输入的字符串也清空<br>2.为什么delphi无法正常使用,总是说无效的指针入口云云<br>3.怎么让vb调用呀<br>library Project1;<br><br>uses<br> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> Dialogs, StdCtrls, ShlObj,shellapi,ActiveX, ComObj, CommCtrl;<br><br>{$R *.res}<br>procedure freemm(idwidechar);<br>var<br> Malloc:IMalloc;<br>begin<br> if ID = nil then Exit;<br> OLECheck(SHGetMalloc(Malloc));<br> Malloc.Free(ID);<br>end;<br><br>function Createmm(cbSize:UINT)widechar;<br> var<br> lpMalloc:IMalloc;<br> begin<br> if SHGetMalloc(lpMalloc) &lt;&gt; NOERROR then<br> begin<br> Result := nil;<br> Exit;<br> end;<br> Result := lpMAlloc.Alloc(cbSize);<br> if Result &lt;&gt; nil then<br> FillChar(Result^, cbSize,#0);<br> end;<br><br>function pp(Dest: PWideChar; Source: PChar; MaxChars: Integer): Integer;stdcall;<br>var<br> len: Cardinal;<br>begin<br> len := 0;<br> if Source &lt;&gt; nil then<br> while Source[len] &lt;&gt; #0 do<br> Inc(len);<br> Result := Utf8ToUnicode(Dest, MaxChars, Source, len);<br> end;<br><br>function utf8toun(str:string):string;stdcall;<br>var<br>pwidechar;<br>begin<br>p:=Createmm(255);<br>//fillchar(p,255,0);//此处如果使用fillchar输入的str就会被清空为什么?<br>pp(p,@str,length(str));<br>result:=p;<br>freemm(p);<br>end;<br><br>exports<br>utf8toun;<br>begin<br><br>end.