.net - Delphi : How to call the .Net 4.0 版本的 StrongNameSignatureVerificationEx

标签 .net delphi interop jedi jedi-code-library

我正在尝试从 Delphi(使用 Rad Studio Berlin)调用 IClrStrongName 上的 StrongNameSignatureVerificationEx

我的第一次尝试只是使用了定义

function StrongNameSignatureVerificationEx(
  wszFilePath : LPCWSTR;
  fForceVerification : boolean;
  var pfWasVerifided : boolean
): BOOL; stdcall; external 'mscoree.dll';

但这调用了 .Net 2.0 版本(目标计算机不需要 - 给出了一个很好的“请安装 .net Framework 2.0/3.5 消息”)

有一种机制可以创建 CLR 主机并使用 TJclClrHost 从特定运行时调用例程的版本

var
  anHost : TJclClrHost;
  aClsId : TGUID;
  res : Boolean;
  obj : OleVariant;  // ? Not sure about this, copying from another example
begin

    anHost := TJclClrHost.Create('v4.0.30319');
    anHost. Start
    aClsId := StringToGuid('{9280188d-0e8e-4867-b30c-7fa83884e8de}'); 
    res := anHost.GetInterface(aClsId, obj);

    //...

但是,我没有 IClrStrongName 的 Delphi 定义,因此一旦获得该对象,我就看不到如何调用它的任何方法。导入 mscoree.tlb 并没有给出一个结果,网络搜索只向我显示了来自

的 C++ 定义
  1. 上面的代码是否正确(尤其是 GetInterface() 的“obj”参数)?
  2. 我是否需要接口(interface)定义来调用该方法(是否可以通过名称调用)?
  3. 哪里可以获得 IClrStrongName 的 Delphi 定义?
  4. 如何将 C++ 定义转换为 Delphi?

最佳答案

最简单的方法是创建一个导出所需功能的 .net 类库。一些方法可以做到这一点:

  1. 使用混合模式 C++/CLI 类库。这允许您直接创建类非托管导出。这些反过来又可以调用托管代码。
  2. 创建一个 C# 类库并使用 Robert Giesecke 的 UnmanagedExports 库来公开您的功能。

在这两种情况下,您最终都会得到一个 .dll 文件,您可以使用 external 指令将其函数导入 Delphi。

网络上以及 Stack Overflow 上有很多关于如何执行这两件事的示例,因此我不会尝试创建更多相同的示例。

关于.net - Delphi : How to call the .Net 4.0 版本的 StrongNameSignatureVerificationEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44262253/

相关文章:

c# - "Input string was not in a correct format"没有有意义的堆栈跟踪的错误消息

.Net WikiText 到 HTML 解析器

.net - .Net Framework 4.6.1 中的 Azure Function App 突然停止工作

delphi - Delphi 2009与Delphi 2010的比较

c# - 添加新组件以及什么是 Interop.dll 文件?

interop - 是否可以对互操作程序集进行代码覆盖率分析?

performance - OpenCL - OpenGL 互操作性能

c# - 在 C# 中使用 XML 作为列表结构的设计模式

windows - UDP丢包

delphi - 如何在编译时自动为 .exe 指定唯一的名称?