使用Delphi 10从C#dll打开Windows证书列表

贝类

我整天都在尝试有关该主题的一些教程和许多答案,但无法弄清楚我在做什么错。Delphi甚至不会编译,我需要签署一些XML文档,我认为ref或out string参数将是最好的方式。在此先感谢您的帮助。

DLL:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading;
using System.Xml;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

    namespace Test
    {
        public class Test
        {

            [DllExport(CallingConvention = CallingConvention.StdCall)]
            [return: MarshalAs(UnmanagedType.LPWStr)]
            [ComVisible(true)]

            public static void ShowCertificatesList([MarshalAs(UnmanagedType.BStr)] ref string pXmlDoc)
            {
                pXmlDoc = "test";
                var store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                var certificates = store.Certificates;
                X509CertificateCollection vListaCertificados;

                vListaCertificados = X509Certificate2UI.SelectFromCollection(certificates, "test", "Certificate list", X509SelectionFlag.SingleSelection);
            }
        }
    }

它可以从Windows窗体工作:

private void button1_Click(object sender, EventArgs e)
    {
        string TestStr= "123";
        Test.Test.ShowCertificatesList(ref TestStr);


    }

但不是来自Delphi:

 var
   Form3: TForm3;

    procedure ShowCertificatesList(var pStrRef : String) ; stdcall; external 'Test.dll' name 'ShowCertificatesList';

    implementation

    {$R *.dfm}

  procedure TForm3.Button1Click(Sender: TObject);
    var
    vStrRef: String;
    begin
      vStrRef:=  'in' ;
      ShowCertificatesList(vStrRef);
      vStrRef := vStrRef;
  end;
大卫·赫弗南(David Heffernan)

Delphi函数的声明不正确。使用WideString相匹配BStr

procedure ShowCertificatesList(var pStrRef: WideString);
  stdcall; external 'Test.dll';

以下属性应从C#代码中删除:

[return: MarshalAs(UnmanagedType.LPWStr)]
[ComVisible(true)]

该函数没有返回值,并且您没有使用COM。

如果是我,我将使用本机Windows API。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章