VB コード
VB アプリケーション コードに DLL 関数デカルレーションがあります。
Declare Function TstCharReturn Lib "myLib" Alias "TstCharReturn" (ByVal c As System.Text.StringBuilder) As Boolean
これはその関数を呼び出すコードです
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s As String
Dim builder As New System.Text.StringBuilder
r = TstCharReturn(builder)
LogIt(s)
LogIt(r)
End Sub
不変であるStringBuilder
ため、文字列の代わりに使用することをお勧めしますが、どちらも同じように機能します。String
Delphi DLL コード:
Function TstCharReturn (var c: pchar) : Boolean; stdcall;
var
BuffSize: Integer;
sOut: string;
begin
sOut:='abcdefghijklmnoprst';
BuffSize:=SizeOf(Char)*(Length(sOut)+1);
getmem(c, BuffSize);
FillChar(c^,BuffSize,0);
Result := Length(sOut)>0;
if Result then
begin
Move(sOut[1], PChar(c)^, BuffSize);
end;
end;
VB 出力にガベージが表示されました。問題とは何ですか?そしてもう1つ質問です。を使用した場合GetMem
、どこかでメモリを解放する必要がありますか?そうしないと VB がそれを行いますか? VB6 と VB2010 の間に違いはありますか?