C# 使用Delphi 10从c dll打开windows证书列表
我一整天都在努力学习一些关于这个主题的教程和很多答案,但是我不知道我做错了什么。Delphi甚至不会编译,我需要签署一些XML文档,我认为ref或out字符串参数是最好的方式。提前感谢您的帮助 动态链接库: 它在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
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)]