掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列を扱うDLLの書き方は? (ID:10797)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
引数でPCHAR渡しにします。 呼出では、PCHAR(strBuf)などとすればOKです。 例えば function FuncTest(InStr: PCHAR; OutStr: PCHAR; Len: Integer): Integer; stdcall; var strBuf: String; begin strBuf := String(InStr); // 引数で渡されたPCHARをStringに変換 { strBufを加工 } if (OutStr <> nil) and (Len > Length(strBuf) then begin CopyMemory(OutStr, PCHAR(strBuf), Length(strBuf)+1); end; Result := Length(strBuf)+1; end; というようにして、呼出で l := FuncTest(PCHAR(InStr), nil, 0); SetLength(OutStr, l - 1); FuncTest(PCHAR(InStr), PCHAR(OutStr), l); もしくは、 l := FuncTest(PCHAR(InStr), nil, 0); OutBuf := SysGetMem(l); FuncTest(PCHAR(InStr), OutBuf, l); OutStr := String(OutBuf); SysFreeMem(OutBuf); とします。 戻り値の場合は、DLL内部でAllocateし、呼出側で破棄する必要があります。 その場合は、SysGetMem,SysFreeMemでなく、APIで確保する必要があります。 # DLL内部でのメモリマネージャと、呼出側のメモリマネージャが違うため
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.