Привет всем
Есть сигнатура Delphi, описывающая функцию в dll
function _ExportKeys(hProv: HCRYPTPROV; PinCode: PChar; var PrivateKey, PublicKey: PByte;
var PrivateKeyLen, PublicKeyLen: DWORD; IsSignKey: Boolean): Boolean;
stdcall; external EXPORT_CRYPTO_NAME name '_ExportKeys';
пытаюсь её описать на c# и ничего не выходит
В чем проблема?
Если прогнать метод трассировкой, то в delphi получаются правильные значения (с ними прога дальше нормально работает)-
privateKey : $950bb0
publicKey: $950ce8
privateKeyLen: 308
publicKeyLen: 84
Одна из попыток описать была такой:
[DllImport("sspCrypto.dll", EntryPoint = "_ExportKeys")]
public static extern bool ExportKeys(HCRYPTPROV provider,
[MarshalAs(UnmanagedType.LPStr)] string pinCode,
out IntPtr privateKey,
out IntPtr publicKey,
out int privateKeyLength,
out int publicKeyLength,
bool isSignKey
);
но вот результаты черте-какие
privateKey : 67964120
publicKey: 308
privateKeyLen: 84
publicKeyLen: 0
Как написать, чтобы нормально заработало?
Здравствуйте, Аноним, Вы писали:
А>Есть сигнатура Delphi, описывающая функцию в dll
А> function _ExportKeys(hProv: HCRYPTPROV; PinCode: PChar; var PrivateKey, PublicKey: PByte;
А> var PrivateKeyLen, PublicKeyLen: DWORD; IsSignKey: Boolean): Boolean;
А> stdcall; external EXPORT_CRYPTO_NAME name '_ExportKeys';
А>пытаюсь её описать на c# и ничего не выходит
А>В чем проблема?
А>Одна из попыток описать была такой:
А> [DllImport("sspCrypto.dll", EntryPoint = "_ExportKeys")]
А> public static extern bool ExportKeys(HCRYPTPROV provider,
А> [MarshalAs(UnmanagedType.LPStr)] string pinCode,
А> out byte privateKey,
А> out byte publicKey,
А> out uint privateKeyLength,
А> out uint publicKeyLength,
А> bool isSignKey
А> );
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Аноним, Вы писали:
А>>Есть сигнатура Delphi, описывающая функцию в dll
_FR>А>> function _ExportKeys(hProv: HCRYPTPROV; PinCode: PChar; var PrivateKey, PublicKey: PByte;
А>> var PrivateKeyLen, PublicKeyLen: DWORD; IsSignKey: Boolean): Boolean;
А>> stdcall; external EXPORT_CRYPTO_NAME name '_ExportKeys';
А>>пытаюсь её описать на c# и ничего не выходит
А>>В чем проблема?
А>>Одна из попыток описать была такой:
_FR>А>> [DllImport("sspCrypto.dll", EntryPoint = "_ExportKeys")]
А>> public static extern bool ExportKeys(HCRYPTPROV provider,
А>> [MarshalAs(UnmanagedType.LPStr)] string pinCode,
А>> out byte privateKey,
А>> out byte publicKey,
А>> out uint privateKeyLength,
А>> out uint publicKeyLength,
А>> bool isSignKey
А>> );
_FR>
Та же фигня.
Тем более непонятно, что с теми byte'ами дальше делать.
Как видно в значениях переменных из первого сообщения, дельфи как-то разбирается с тем, что в PByte лежит что-то большее, чем один байт.
А так — такие цифири вытаскиваются, что ничего полезного не дает
privateKey 216 byte
publicKey 52 byte
privateKeyLength 84 uint
publicKeyLength 0 uint