我正在尝试从 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 并没有给出一个结果,网络搜索只向我显示了来自
- 上面的代码是否正确(尤其是 GetInterface() 的“obj”参数)?
- 我是否需要接口(interface)定义来调用该方法(是否可以通过名称调用)?
- 哪里可以获得 IClrStrongName 的 Delphi 定义?
- 如何将 C++ 定义转换为 Delphi?
最佳答案
最简单的方法是创建一个导出所需功能的 .net 类库。一些方法可以做到这一点:
- 使用混合模式 C++/CLI 类库。这允许您直接创建类非托管导出。这些反过来又可以调用托管代码。
- 创建一个 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/