如何在SQL Server程序集中使用Delphi DLL

时间:2019-02-19 09:03:12

标签: sql-server delphi-2010 sqlclr sql-server-2017

Delphi DLL

library SqlDll;

uses
  System.SysUtils,
  System.Classes;

{$R *.res}

function SqlQuery(_a, _b: Integer): Integer; stdcall; export;
begin
  Result := _a + _b;
end;

exports
   SqlQuery;

begin

end.

SQL Server

DROP ASSEMBLY CalculateDelphi
GO
CREATE ASSEMBLY CalculateDelphi 
FROM 'C:\SqlDLL\SqlDll.dll' 
WITH PERMISSION_SET = unsafe  
GO

错误

  

MSG 6544,第16级,状态1,第153行创建组装组件   “ CalculateDelphi”失败,因为程序集“ CalculateDelphi”为   格式不正确或不是纯.NET程序集。不可验证的PE标头/本地存根。

1 个答案:

答案 0 :(得分:1)

错误消息不言自明:

  

'CalculateDelphi'失败,因为程序集'CalculateDelphi'格式错误或不是纯.NET程序集

SQL Server需要一个.NET程序集,但您没有给它一个.NET程序集,而是给了它一个纯C风格的DLL,而SQL Server不像其他一些数据库那样支持导入。

Delphi无法再生成.NET程序集,当在Delphi 8之后删除Delphi.NET时,它失去了该功能。

对于您要执行的操作,必须使用具有.NET功能的编译器(例如Visual Studio,RemObjects Oxygene等)进行以下操作:

  • 创建一个内部调用DLL的.NET程序集包装。

  • 移植DLL代码以直接将其作为自己的.NET程序集进行编译。