Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Delphi 10从c dll打开windows证书列表_C#_Delphi_Dll_X509certificate - Fatal编程技术网

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

C# 使用Delphi 10从c dll打开windows证书列表,c#,delphi,dll,x509certificate,C#,Delphi,Dll,X509certificate,我一整天都在努力学习一些关于这个主题的教程和很多答案,但是我不知道我做错了什么。Delphi甚至不会编译,我需要签署一些XML文档,我认为ref或out字符串参数是最好的方式。提前感谢您的帮助 动态链接库: 它在Windows窗体中工作: private void button1_Click(object sender, EventArgs e) { string TestStr= "123"; Test.Test.ShowCertificatesList

我一整天都在努力学习一些关于这个主题的教程和很多答案,但是我不知道我做错了什么。Delphi甚至不会编译,我需要签署一些XML文档,我认为ref或out字符串参数是最好的方式。提前感谢您的帮助

动态链接库:

它在Windows窗体中工作:

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


    }
但并非来自德尔福:

 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;

只是为了表明另一种方法

您始终可以通过本机API直接操作Windows证书存储。NET也可以使用,如博客文章所示


日语,但谷歌可以将其翻译成英语。

Delphi函数声明不正确。使用宽字符串匹配BStr:

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

[return: MarshalAs(UnmanagedType.LPWStr)]
[ComVisible(true)]
该函数没有返回值,并且您没有使用COM


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

您还没有解释Delphi版本的问题所在。但不是从Delphi来的,这不是一个有意义的问题描述。您对Delphi代码有什么具体问题?除此之外,您使用的是Delphi字符串,它不是互操作的,您将它作为变量传递。您还说过DLL函数将返回ManagedType.LPWStr,但将函数本身定义为返回void。从DLL代码和设置vStrRef:=vStrRef;很抱歉,Delphi甚至不会编译。这也不是一个有意义的问题描述。您得到的具体错误是什么?如果Delphi不编译它,它会提供错误消息,告诉您原因。它们就在您面前的屏幕上,您可以使用“消息”选项卡中的右键单击菜单进行复制/粘贴。你没有理由不在问题中包含这些信息。你请求免费帮助来解决你的问题;您应该提供您已有的详细信息,让我们尽可能容易地做到这一点。这只是一个示例,以简化方法,alsp delphi上的ManagedType.LPWStr和var是通过尝试一些类似的答案得到的。delphi上的调试没有出现错误。我们确实使用delphi 2009构建了程序,但在我的研究过程中,我们发现capcom被中断,并且我们有许多使用A3证书的异常。同样的情况在使用c时并没有发生,所以我们正在试图找到一种解决方法。同时caps的ID和ID问题也迫使我这么做。@Marisco,将链接更改为最近的链接。微软确实发布了新的API来使用新的标准。您可能需要自己包装新的本机API,或者使用第三方翻译。非常感谢!我去看看!Hefferman,widestring解决了这个问题你是说delphi的原生Windows API?是的,这就是我的意思。是的,我知道我更喜欢这样,我也尝试过,但是像我在上面说的那样,使用D2009时,我遇到了很多问题,不能再胡闹了。我可能会在文件到期后尝试Lex解决方案。Tkx!好吧,尽管如此,我想我回答了你问的问题,对吗?是的,先生!我不能投票/标记为有用的一些怎么没有足够的声誉!
procedure ShowCertificatesList(var pStrRef: WideString);
  stdcall; external 'Test.dll';
[return: MarshalAs(UnmanagedType.LPWStr)]
[ComVisible(true)]