InnoSetupプロジェクトでC#DLLを参照しようとしています。必要なのは、1つの文字列パラメータと文字列戻り値を持つ単純な関数です。しかし、この例とさまざまな種類のマーシャリングを試しても、私は常にアクセス違反で終わります。Innoセットアップアクセス違反のC#DLL
これは私のC#クラスです:
public class NKToolbox
{
[DllExport("EncryptPassword", CallingConvention.StdCall)]
static string EncryptPassword([MarshalAs(UnmanagedType.LPStr)] string password)
{
File.WriteAllText(@"C:\temp\test.txt", password);
return password.Length.ToString();
}
}
私はメソッドが呼び出されたとしてもどうかを確認するためにFile.WriteAllText
を置きます。しかし、いいえ。私はRobert GieseckeのUnmanagedExportsパッケージを使用します。
そしてInno Setupのコード:私が得るラインstr := EncryptPassword('sdvadfva')
で
function EncryptPassword(pw: WideString): WideString;
external '[email protected]:nktoolbox.dll stdcall';
function InitializeSetup: Boolean;
var
str: WideString;
begin
str := EncryptPassword('sdvadfva');
log(str);
result := False;
end;
「アドレスのアドレスにアクセス違反が......書き込み.....」私が使用していますInnoセットアップ5.5.9 Unicode。
私は他のスレッドで見つかったさまざまなマーシャルステートメントで試してみましたが、out
キーワードで試してみましたが、通常string
タイプとWideString
が必要です。 Delphiコードで
遅くて申し訳ありませんが、私は今までそれをテストする時間がありませんでした。しかし、それは魅力のように動作します!ありがとうございました。 –